Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Mengagregatkan Lajur Tunggal dengan Cekap dalam Pertanyaan SQL Kompleks?

Bagaimanakah Saya Boleh Mengagregatkan Lajur Tunggal dengan Cekap dalam Pertanyaan SQL Kompleks?

DDD
DDDasal
2024-12-25 18:07:20970semak imbas

How Can I Efficiently Aggregate a Single Column in Complex SQL Queries?

Agregat Lajur Tunggal dalam Pertanyaan Kompleks

Apabila bekerja dengan pertanyaan yang mengandungi banyak lajur, ia boleh mencabar untuk mengagregatkan satu lajur dengan berkesan. Walaupun kaedah konvensional untuk menyertakan semua medan dalam klausa SELECT, GROUP BY dan ORDER BY mungkin mencukupi, kaedah ini boleh membawa kepada pertanyaan bertele-tele.

Alternatif yang Lebih Mudah untuk PostgreSQL 9.1

Jika anda menggunakan PostgreSQL 9.1 atau lebih baru, pendekatan yang lebih mudah wujud. Memandangkan anda telah menentukan foo1 sebagai kunci utama, anda boleh memudahkan pertanyaan anda seperti berikut:

SELECT foo1, foo2, foo3, foo4, foo5, foo6, string_agg(aggregated_field, ', ')
FROM   tbl1
GROUP  BY 1
ORDER  BY foo7, foo8;

Agregat Dahulu, Sertai Kemudian untuk Pertanyaan Berbilang Jadual

Walau bagaimanapun, apabila berurusan dengan berbilang jadual dan perhubungan yang lebih kompleks, mungkin lebih cekap untuk mengagregat dahulu dan bergabung kemudian. Pertimbangkan pertanyaan yang disemak ini:

SELECT t1.foo1, t1.foo2, ...
     , t2.bar1, t2.bar2, ...
     , a.aggregated_col 
FROM   tbl1 t1
LEFT   JOIN tbl2 t2 ON ...
...
LEFT   JOIN (
   SELECT some_id, string_agg(agg_col, ', ') AS aggregated_col
   FROM   agg_tbl a ON ...
   GROUP  BY some_id
   ) a ON a.some_id = ?.some_id
ORDER  BY ...

Dengan mengagregat dan bergabung secara berasingan, anda mengelakkan overhed pengagregatan yang tidak perlu untuk kebanyakan pertanyaan anda.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengagregatkan Lajur Tunggal dengan Cekap dalam Pertanyaan SQL Kompleks?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn