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
Lepaskan: 2025-01-13 07:10:45
asal
653 orang telah melayarinya

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

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

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

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

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!

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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan