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

Bagaimanakah Saya Boleh Mengagregatkan Lajur Tunggal dengan Cekap dalam Pertanyaan Berbilang Lajur?

Barbara Streisand
Barbara Streisandasal
2024-12-20 07:46:10939semak imbas

How Can I Efficiently Aggregate a Single Column in a Multi-Column Query?

Agregat Lajur Tunggal dalam Pertanyaan Berbilang Lajur

Ikhtisar

Mengagregatkan satu lajur dalam pertanyaan dengan banyak lajur lain boleh menjadi satu cabaran, terutamanya apabila semua medan SELECT dan ORDER BY mesti sama ada diagregatkan atau sebahagian daripada GROUP BY. Struktur pertanyaan verbose ini boleh menjadi menyusahkan untuk diuruskan.

Pertanyaan Ringkas untuk PostgreSQL 9.1

Dalam PostgreSQL 9.1 atau lebih baru, penyelesaian yang lebih mudah wujud. Apabila menggunakan kunci utama sebagai kriteria KUMPULAN OLEH, pertanyaan boleh diperkemaskan:

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

Pertanyaan dengan Berbilang Jadual

Untuk pertanyaan yang melibatkan berbilang jadual dengan perhubungan yang berbeza-beza, lebih cekap mengagregatkan data dahulu dan sertai jadual kemudian:

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 memisahkan pengagregatan dan menyertai, majoriti pertanyaan boleh mengelakkan pengagregatan yang tidak perlu, mengurangkan kerumitan dan meningkatkan prestasi.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengagregatkan Lajur Tunggal dengan Cekap dalam Pertanyaan 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