Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mengagregatkan Lajur Tunggal dengan Cekap dalam Pertanyaan PostgreSQL dengan Berbilang Lajur?

Bagaimana untuk Mengagregatkan Lajur Tunggal dengan Cekap dalam Pertanyaan PostgreSQL dengan Berbilang Lajur?

Patricia Arquette
Patricia Arquetteasal
2024-12-31 13:55:08830semak imbas

How to Efficiently Aggregate a Single Column in PostgreSQL Queries with Multiple Columns?

Cara Mengagregatkan Lajur Tunggal dalam Pertanyaan dengan Berbilang Lajur Tambahan

Dalam PostgreSQL, mengagregatkan satu lajur sambil memasukkan lajur lain dalam pertanyaan boleh menyusahkan. Walau bagaimanapun, terdapat penyelesaian yang tersedia.

Menggunakan Kumpulan Oleh untuk Kunci Utama

PostgreSQL 9.1 dan kemudiannya memudahkan proses. Apabila mengagregatkan dengan GROUP BY, anda hanya perlu memasukkan kunci utama jadual. Oleh itu, jika foo1 ialah kunci utama tbl1, pertanyaan anda boleh dipermudahkan kepada:

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

Mengagregatkan Sebelum Menyertai

Untuk pertanyaan dengan berbilang jadual dan perhubungan, ia boleh menjadi lebih cekap untuk agregat dahulu dan sertai kemudian. Contohnya:

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 ...

Ini memastikan pengagregatan dilakukan hanya di bahagian pertanyaan yang berkaitan, meningkatkan prestasi.

Atas ialah kandungan terperinci Bagaimana untuk Mengagregatkan Lajur Tunggal dengan Cekap dalam Pertanyaan PostgreSQL dengan Berbilang Lajur?. 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