Kumpulan oleh klausa dalam SQL digunakan untuk mengumpulkan baris yang mempunyai nilai yang sama dalam lajur yang ditentukan ke dalam baris ringkasan. Ia biasanya digunakan dengan fungsi agregat (seperti Count, Max, Min, Sum, AVG) untuk melakukan pengiraan pada setiap kumpulan data. Berikut adalah cara anda boleh menggunakan Kumpulan dengan klausa:
Sintaks Asas : Sintaks asas kumpulan dengan pertanyaan adalah:
<code class="sql">SELECT column1, aggregate_function(column2) FROM table_name GROUP BY column1;</code>
Dalam contoh ini, column1
digunakan untuk mengumpulkan data, dan aggregate_function(column2)
digunakan untuk setiap kumpulan.
Contoh : Katakan anda mempunyai jadual yang dipanggil sales
dengan region
lajur dan amount
. Anda ingin mencari jumlah jualan bagi setiap rantau. Pertanyaannya adalah:
<code class="sql">SELECT region, SUM(amount) as total_sales FROM sales GROUP BY region;</code>
Pertanyaan ini kumpulan data oleh lajur region
dan mengira jumlah amount
bagi setiap kumpulan.
Lajur Pelbagai : Anda boleh berkumpul dengan pelbagai lajur dengan menyenaraikannya dalam Kumpulan mengikut klausa, dipisahkan oleh koma. Contohnya:
<code class="sql">SELECT region, product, SUM(amount) as total_sales FROM sales GROUP BY region, product;</code>
Pertanyaan ini akan mengumpulkan data oleh kedua -dua region
dan product
, dan mengira jumlah amount
untuk setiap kombinasi unik region
dan product
.
Apabila menggunakan Klausa Kumpulan, beberapa fungsi agregat biasa digunakan untuk melakukan pengiraan pada data yang dikelompokkan. Fungsi ini termasuk:
Kiraan () : Mengira bilangan baris dalam setiap kumpulan. Contohnya:
<code class="sql">SELECT region, COUNT(*) as number_of_sales FROM sales GROUP BY region;</code>
SUM () : Mengira jumlah lajur angka dalam setiap kumpulan. Contohnya:
<code class="sql">SELECT region, SUM(amount) as total_sales FROM sales GROUP BY region;</code>
Avg () : Mengira purata lajur angka dalam setiap kumpulan. Contohnya:
<code class="sql">SELECT region, AVG(amount) as average_sale FROM sales GROUP BY region;</code>
Max () : Cari nilai maksimum lajur dalam setiap kumpulan. Contohnya:
<code class="sql">SELECT region, MAX(amount) as max_sale FROM sales GROUP BY region;</code>
Min () : Cari nilai minimum lajur dalam setiap kumpulan. Contohnya:
<code class="sql">SELECT region, MIN(amount) as min_sale FROM sales GROUP BY region;</code>
Fungsi -fungsi ini membolehkan anda meringkaskan data dalam pelbagai cara, memberikan gambaran mengenai data yang dikumpulkan.
Klausa yang mempunyai digunakan bersempena dengan kumpulan dengan klausa untuk menapis hasil yang dikelompokkan berdasarkan keadaan. Tidak seperti klausa WHERE, yang menapis baris sebelum kumpulan, kumpulan penapis klausa selepas mereka telah diwujudkan. Inilah cara anda boleh menggunakannya bersama:
Sintaks Asas : Sintaks kumpulan gabungan pertanyaan oleh dan mempunyai:
<code class="sql">SELECT column1, aggregate_function(column2) FROM table_name GROUP BY column1 HAVING condition;</code>
Contoh : Katakan anda ingin mencari kawasan dengan jumlah jualan lebih daripada $ 10,000 dari jadual sales
. Pertanyaannya adalah:
<code class="sql">SELECT region, SUM(amount) as total_sales FROM sales GROUP BY region HAVING SUM(amount) > 10000;</code>
Pertanyaan ini pertama kumpulan data mengikut region
, mengira jumlah jualan untuk setiap rantau, dan kemudian menapis hasilnya untuk memasukkan hanya kawasan -kawasan di mana jumlah jualan melebihi $ 10,000.
Menggabungkan dengan mana : Anda juga boleh menggunakan di mana untuk menapis baris sebelum berkumpul dan perlu menapis kumpulan. Contohnya:
<code class="sql">SELECT region, SUM(amount) as total_sales FROM sales WHERE amount > 0 GROUP BY region HAVING SUM(amount) > 10000;</code>
Dalam pertanyaan ini, klausa WHERE pertama menapis mana -mana baris dengan jumlah negatif atau sifar, data kemudian dikelompokkan oleh region
, dan klausa yang menapis kumpulan berdasarkan jumlah jualan.
Apabila menggunakan Kumpulan dengan klausa dalam pertanyaan SQL, terdapat beberapa perangkap yang berpotensi untuk dielakkan:
Rujukan lajur yang salah : Dalam pertanyaan dengan kumpulan oleh, mana -mana lajur dalam senarai pilih yang bukan fungsi agregat mesti dimasukkan ke dalam Kumpulan mengikut klausa. Melupakan untuk memasukkan lajur yang tidak diagihkan dalam kumpulan oleh klausa boleh mengakibatkan kesilapan atau keputusan yang tidak dijangka. Contohnya:
<code class="sql">SELECT region, product, SUM(amount) -- This will cause an error if 'product' is not included in GROUP BY FROM sales GROUP BY region;</code>
Versi yang betul ialah:
<code class="sql">SELECT region, product, SUM(amount) FROM sales GROUP BY region, product;</code>
Pencampuran lajur agregat dan bukan agregat : Pencampuran lajur agregat dan bukan agregat dalam senarai pilih tanpa pengelompokan yang betul boleh membawa kepada hasil yang tidak dijangka. Contohnya:
<code class="sql">SELECT region, SUM(amount), amount -- This will cause an error because 'amount' is not aggregated FROM sales GROUP BY region;</code>
Untuk membetulkannya, anda perlu sama ada kumpulan dengan amount
atau menggunakan fungsi agregat di atasnya.
Menggunakan mempunyai tanpa kumpulan oleh : klausa yang mempunyai dimaksudkan untuk digunakan dengan kumpulan oleh. Menggunakan tanpa kumpulan oleh akan mengakibatkan kesilapan dalam banyak pangkalan data SQL. Contohnya:
<code class="sql">SELECT region, SUM(amount) FROM sales HAVING SUM(amount) > 10000; -- This will cause an error because GROUP BY is missing</code>
Versi yang betul ialah:
<code class="sql">SELECT region, SUM(amount) FROM sales GROUP BY region HAVING SUM(amount) > 10000;</code>
Dengan menyedari perangkap -perangkap ini, anda boleh menulis kumpulan yang lebih berkesan dan cekap oleh pertanyaan.
Atas ialah kandungan terperinci Bagaimana anda mengumpulkan data menggunakan Kumpulan mengikut klausa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!