Rumah >pangkalan data >tutorial mysql >Bagaimanakah SQL GROUP BY Clause berfungsi dengan dan Tanpa Fungsi Agregat?

Bagaimanakah SQL GROUP BY Clause berfungsi dengan dan Tanpa Fungsi Agregat?

Barbara Streisand
Barbara Streisandasal
2025-01-13 07:10:45650semak imbas

How Does SQL's GROUP BY Clause Work with and Without Aggregate Functions?

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!

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