Apakah SQL Group mengikut Klausa?
Klausa GROUP BY adalah perintah SQL yang digunakan untuk mengelompokkan baris yang mempunyai nilai yang sama . Klausa GROUP BY digunakan dalam pernyataan SELECT. Secara pilihan ia digunakan bersama dengan fungsi agregat untuk menghasilkan laporan ringkasan dari pangkalan data.
Itulah yang dilakukannya, merangkum data dari pangkalan data.
Pertanyaan yang mengandungi klausa GROUP BY dipanggil pertanyaan dikelompokkan dan hanya mengembalikan satu baris untuk setiap item yang dikelompokkan.
SQL GROUP BY Sintaks
Setelah kita mengetahui apa itu klausa SQL GROUP BY, mari kita lihat sintaks untuk kumpulan asas dengan pertanyaan.
SELECT statements… GROUP BY column_name1[,column_name2,… ] [HAVING condition];
SINI
- "SELECT statement ..." adalah pertanyaan perintah SQL SELECT standard.
- " GROUP BY column_name1" adalah klausa yang melakukan pengelompokan berdasarkan column_name1.
- "[, column_name2,…]" adalah pilihan; mewakili nama lajur lain apabila pengelompokan dilakukan pada lebih dari satu lajur.
- "[MEMILIKI syarat]" adalah pilihan; ia digunakan untuk menyekat baris yang terkena klausa GROUP BY. Ia serupa dengan klausa WHERE.
Mengelompok menggunakan Lajur Tunggal
Untuk membantu memahami kesan SQL Group By klausa, mari kita laksanakan pertanyaan sederhana yang mengembalikan semua entri jantina dari jadual ahli.
SELECT `gender` FROM `members` ;
gender |
---|
Female |
Female |
Male |
Female |
Male |
Male |
Male |
Male |
Male |
Andaikan kita mahu mendapatkan nilai unik untuk jantina. Kami boleh menggunakan pertanyaan berikut -
SELECT `gender` FROM `members` GROUP BY `gender`;
Melaksanakan skrip di atas di meja kerja MySQL terhadap Myflixdb memberikan hasil berikut.
gender |
---|
Female |
Male |
Perhatikan hanya dua hasil yang dikembalikan. Ini kerana kami hanya mempunyai dua jenis jantina iaitu Lelaki dan Wanita. Klausa GROUP BY dalam SQL mengumpulkan semua anggota "Lelaki" bersama-sama dan hanya mengembalikan satu baris untuknya. Ia melakukan perkara yang sama dengan anggota "Perempuan".
Mengelompok menggunakan beberapa lajur
Anggaplah kita mahu mendapatkan senarai kategori_id filem dan tahun-tahun yang sesuai di mana ia dilancarkan.
Mari perhatikan hasil pertanyaan ringkas ini
SELECT `category_id`,`year_released` FROM `movies` ;
category_id | year_released |
---|---|
1 | 2011 |
2 | 2008 |
NULL | 2008 |
NULL | 2010 |
8 | 2007 |
6 | 2007 |
6 | 2007 |
8 | 2005 |
NULL | 2012 |
7 | 1920 |
8 | NULL |
8 | 1920 |
Hasil di atas mempunyai banyak rangkap.
Mari jalankan pertanyaan yang sama menggunakan kumpulan oleh dalam SQL -
SELECT `category_id`,`year_released` FROM `movies` GROUP BY `category_id`,`year_released`;
Melaksanakan skrip di atas di meja kerja MySQL terhadap myflixdb memberi kita hasil berikut seperti yang ditunjukkan di bawah.
category_id | year_released |
---|---|
NULL | 2008 |
NULL | 2010 |
NULL | 2012 |
1 | 2011 |
2 | 2008 |
6 | 2007 |
7 | 1920 |
8 | 1920 |
8 | 2005 |
8 | 2007 |
Klausa GROUP BY beroperasi pada id kategori dan tahun yang dikeluarkan untuk mengenal pasti baris unik dalam contoh kami di atas.
Sekiranya id kategori sama tetapi tahun yang dikeluarkan berbeza, maka satu baris dianggap sebagai satu yang unik. Sekiranya id kategori dan tahun yang dikeluarkan adalah sama untuk lebih dari satu baris, maka ia dianggap pendua dan hanya satu baris ditunjukkan.
Fungsi pengelompokan dan agregat
Andaikan kita mahu jumlah lelaki dan wanita dalam pangkalan data kita. Kita boleh menggunakan skrip berikut yang ditunjukkan di bawah untuk melakukannya.
SELECT `gender`,COUNT(`membership_number`) FROM `members` GROUP BY `gender`;
Melaksanakan skrip di atas di MySQL workbench terhadap myflixdb memberikan hasil berikut.
gender | COUNT('membership_number') |
---|---|
Female | 3 |
Male | 5 |
Hasil yang ditunjukkan di bawah dikumpulkan berdasarkan setiap nilai jantina yang unik dan jumlah baris yang dikelompokkan dikira menggunakan fungsi COUNT agregat.
Mengehadkan hasil pertanyaan menggunakan klausa HAVING
Tidak semestinya kita mahu melakukan pengelompokan pada semua data dalam jadual tertentu. Akan ada kalanya kita ingin menyekat hasil kita kepada kriteria tertentu. Dalam kes seperti itu, kita dapat menggunakan klausa HAVING
Andaikan kita ingin mengetahui semua tahun pelepasan untuk kategori 8. Id filem. Kami akan menggunakan skrip berikut untuk mencapai hasilnya.
SELECT * FROM `movies` GROUP BY `category_id`,`year_released` HAVING `category_id` = 8;
Melaksanakan skrip di atas di meja kerja MySQL terhadap Myflixdb memberikan hasil berikut seperti yang ditunjukkan di bawah.
movie_id | title | director | year_released | category_id |
---|---|---|---|---|
9 | Honey mooners | John Schultz | 2005 | 8 |
5 | Daddy's Little Girls | NULL | 2007 | 8 |
Perhatikan hanya filem dengan kategori id 8 yang dipengaruhi oleh klausa GROUP BY kami.
Ringkasan
- GROUP BY Clause SQL digunakan untuk mengelompokkan baris dengan nilai yang sama.
- Klausa GROUP BY digunakan bersama dengan penyataan SQL SELECT.
- Pernyataan SELECT yang digunakan dalam klausa GROUP BY hanya dapat digunakan mengandungi nama lajur, fungsi agregat, pemalar dan ungkapan.
- Klausa Memiliki SQL digunakan untuk menyekat keputusan yang dikembalikan oleh klausa GROUP BY.
- MYSQL GROUP BY Klausa digunakan untuk mengumpulkan data dari beberapa rekod dan mengembalikan rekod yang ditetapkan oleh satu atau lebih lajur.