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

Bagaimanakah Saya Boleh Mengagregatkan Lajur Tunggal dengan Cekap dalam Pertanyaan SQL Kompleks?

DDD
Lepaskan: 2024-12-25 18:07:20
asal
968 orang telah melayarinya

How Can I Efficiently Aggregate a Single Column in Complex SQL Queries?

Agregat Lajur Tunggal dalam Pertanyaan Kompleks

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.

Alternatif yang Lebih Mudah untuk PostgreSQL 9.1

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;
Salin selepas log masuk

Agregat Dahulu, Sertai Kemudian untuk Pertanyaan Berbilang Jadual

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 ...
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan