Klausa GROUP BY
SQL: Menyelam Dalam
Klausa SQL GROUP BY
ialah alat yang berkuasa untuk mengumpulkan baris berdasarkan lajur yang ditentukan, mendayakan pengiraan agregat (seperti SUM
, COUNT
, AVG
) pada data terkumpul. Mari teroka kelakuannya dengan dan tanpa fungsi agregat.
GROUP BY
Tanpa Fungsi Agregat: Perangkap
Menggunakan GROUP BY
tanpa fungsi agregat mengakibatkan ralat. Pertimbangkan contoh ini:
<code class="language-sql">SELECT * FROM order_details GROUP BY order_no</code>
Ini gagal kerana GROUP BY
memerlukan semua lajur bukan agregat dalam senarai SELECT
untuk turut disertakan dalam klausa GROUP BY
. Kad bebas *
memilih semua lajur, menjadikan pertanyaan samar-samar kerana pangkalan data tidak dapat menentukan nilai yang hendak dikembalikan untuk lajur bukan berkumpulan dalam setiap kumpulan order_no
.
GROUP BY
Dengan Fungsi Agregat: Penyelesaian
Masalah diselesaikan apabila menggunakan fungsi agregat. Fungsi agregat beroperasi pada keseluruhan kumpulan, membolehkan pertanyaan menghasilkan hasil yang bermakna. Contohnya, mengira jumlah harga untuk setiap pesanan:
<code class="language-sql">SELECT SUM(order_price) FROM order_details GROUP BY order_no</code>
Pertanyaan ini berjaya mengembalikan jumlah order_price
untuk setiap order_no
unik.
Fungsi Agregat dan Data Berkumpulan: Mendedahkan Atribut Tersembunyi
Fungsi agregat menawarkan cara untuk mengakses atribut dalam setiap kumpulan. Fungsi SUM
, dalam contoh sebelumnya, mengira jumlah bagi setiap kumpulan order_no
. Ini menunjukkan keupayaan fungsi agregat untuk "menelusuri" ke dalam kumpulan dan mendapatkan maklumat diringkaskan.
Pematuhan SQL Standard: GROUP BY
Peraturan
SQL Standard (tidak seperti pendekatan MySQL yang lebih lembut) memberi mandat bahawa semua lajur tidak teragregat dalam senarai SELECT
mesti muncul dalam klausa GROUP BY
. Oleh itu, pertanyaan berikut adalah sah:
<code class="language-sql">SELECT order_no, SUM(order_price) FROM order_details GROUP BY order_no</code>
Ini sah kerana order_no
, lajur bukan agregat, terdapat dalam klausa GROUP BY
. Prinsip yang sama digunakan untuk pertanyaan dengan berbilang lajur berkumpulan dan fungsi agregat:
<code class="language-sql">SELECT order_no, order_price, MAX(order_item) FROM order_details GROUP BY order_no, order_price</code>
Pertanyaan ini sah kerana kedua-dua order_no
dan order_price
disertakan dalam klausa GROUP BY
.
Atas ialah kandungan terperinci Bagaimanakah SQL GROUP BY Clause berfungsi dengan dan Tanpa Fungsi Agregat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!