Memahami SQL GROUP BY dan Fungsi Agregat: Gambar yang Lebih Jelas
Keupayaan pengagregatan data SQL sangat berkuasa, tetapi interaksi antara GROUP BY
dan fungsi agregat boleh mengelirukan. Kesilapan yang kerap berlaku ialah memilih lajur tidak teragregat dalam penyataan SELECT
selepas menggunakan GROUP BY
tanpa menyenaraikannya secara eksplisit dalam klausa GROUP BY
.
Contohnya:
<code class="language-sql">SELECT * FROM order_details GROUP BY order_no</code>
Pertanyaan ini akan gagal, menghasilkan ralat kerana '*' bukan sebahagian daripada klausa GROUP BY
. Penyelesaiannya ialah dengan menyenaraikan semua lajur bukan agregat dalam klausa GROUP BY
.
Walau bagaimanapun, menggunakan fungsi agregat mengubah tingkah laku:
<code class="language-sql">SELECT SUM(order_price) FROM order_details GROUP BY order_no</code>
Ini berjaya menjumlahkan harga pesanan untuk setiap order_no
, walaupun tanpa order_price
dalam klausa GROUP BY
. Fungsi agregat mengira merentas semua baris dalam setiap kumpulan, tidak kira sama ada lajur yang sepadan berada dalam senarai GROUP BY
.
Untuk mengelakkan salah faham, ingat bahawa selepas mengumpulkan mengikut atribut, anda tidak boleh terus mengakses atribut lain yang tidak disertakan dalam ungkapan GROUP BY
. Hanya fungsi agregat menyediakan akses kepada atribut ini melalui pengiraan berasaskan kumpulan.
SQL standard (tidak seperti MySQL) mewajibkan pemasukan eksplisit semua lajur bukan agregat dalam klausa GROUP BY
. Anda boleh mengumpulkan mengikut subset lajur dan masih memilih lajur tidak teragregat, selagi lajur tersebut merupakan sebahagian daripada GROUP BY
.
Akhir sekali, menggunakan berbilang fungsi agregat dengan asas pengelompokan berbeza boleh membawa kepada keputusan yang tidak dapat diramalkan atau samar-samar. Gabungkan GROUP BY
dan agregat fungsi dengan teliti, memastikan hasil yang anda inginkan jelas sebelum menjalankan pertanyaan.
Atas ialah kandungan terperinci Bagaimanakah Fungsi GROUP BY dan Agregat Berinteraksi dalam Pertanyaan SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!