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

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

DDD
DDDasal
2024-12-27 21:32:27776semak imbas

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

Agregat Lajur dalam Pertanyaan dengan Banyak Lajur Lain

Apabila membuat pertanyaan dengan beberapa lajur dalam set hasil, mengagregatkan satu lajur boleh menjadi cabaran. Walaupun anda boleh menggunakan kaedah yang disebut dalam jawapan yang dirujuk, ia mungkin membawa kepada pertanyaan bertele-tele.

Memudahkan Pertanyaan (PostgreSQL 9.1 dan Kemudian)

PostgreSQL 9.1 dan lebih baharu memberikan pendekatan yang lebih mudah. Dengan mengumpulkan mengikut kunci utama jadual, anda boleh mengagregatkan lajur yang ditentukan tanpa perlu memasukkan semua lajur dalam klausa GROUP BY.

Sebagai contoh, jika foo1 ialah kunci utama dalam pertanyaan sampel anda:

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

Berbilang Jadual dan Perhubungan

Apabila anda pertanyaan melibatkan berbilang jadual dengan pelbagai perhubungan, selalunya lebih cekap untuk mengagregatkan dahulu dan kemudian bergabung:

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 operasi pengagregatan dan bergabung, pertanyaan anda menjadi lebih cekap dan lebih mudah dibaca.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengagregatkan Lajur 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