Memahami SQL GROUP BY dan Fungsi Agregat
KlausaSQL GROUP BY
mengelompokkan baris dengan cekap berdasarkan lajur yang ditentukan. Walau bagaimanapun, kekeliruan sering timbul apabila memilih lajur yang tidak termasuk dalam kumpulan.
Pertimbangkan pertanyaan ini:
<code class="language-sql">SELECT * FROM order_details GROUP BY order_no;</code>
Pertanyaan ini akan gagal dalam banyak sistem pangkalan data (seperti Oracle) kerana ia cuba memilih semua lajur (*
) semasa mengumpulkan hanya dengan order_no
. Ini melanggar peraturan bahawa lajur bukan agregat mesti menjadi sebahagian daripada klausa GROUP BY
.
Penyelesaian? Sertakan lajur bukan agregat dalam klausa GROUP BY
bersebelahan dengan fungsi agregat. Contohnya:
<code class="language-sql">SELECT order_no, SUM(order_price) FROM order_details GROUP BY order_no;</code>
Di sini, order_no
berada dalam kedua-dua klausa SELECT
dan GROUP BY
, manakala SUM(order_price)
melakukan pengagregatan.
Menjawab soalan utama:
Bolehkah fungsi agregat mengakses semua lajur dalam kumpulan?
Ya, fungsi agregat seperti SUM()
beroperasi merentas semua baris dalam setiap kumpulan, mengira nilai agregat untuk lajur yang ditentukan. Dalam contoh di atas, SUM(order_price)
menjumlahkan harga untuk setiap order_no
.
Walau bagaimanapun, mengakses lajur tidak teragregat tanpa memasukkannya dalam klausa GROUP BY
membawa kepada ralat. Pangkalan data tidak dapat menentukan nilai yang hendak dipilih daripada berbilang baris dalam kumpulan.
Oleh itu, sentiasa masukkan semua lajur bukan agregat dalam klausa GROUP BY
atau hadkan klausa SELECT
kepada fungsi agregat sahaja apabila menggunakan GROUP BY
.
Atas ialah kandungan terperinci Bagaimanakah Fungsi Agregat Berfungsi dengan Klausa GROUP BY dalam SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!