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