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