Apa itu Grup SQL menurut Klausul?
Klausa GROUP BY adalah perintah SQL yang digunakan untuk mengelompokkan baris yang memiliki nilai yang sama . Klausa GROUP BY digunakan dalam pernyataan SELECT. Secara opsional, ini digunakan bersama dengan fungsi agregat untuk menghasilkan laporan ringkasan dari database.
Itulah yang dilakukannya, meringkas data dari database.
Kueri yang berisi klausa GROUP BY disebut kueri yang dikelompokkan dan hanya mengembalikan satu baris untuk setiap item yang dikelompokkan.
SQL GROUP BY Syntax
Sekarang kita tahu apa itu klausa SQL GROUP BY, mari kita lihat sintaks untuk grup dasar berdasarkan kueri.
SELECT statements… GROUP BY column_name1[,column_name2,… ] [HAVING condition];
SINI
- "Pernyataan SELECT…" adalah kueri perintah SQL SELECT standar.
- " GROUP BY column_name1" adalah klausa yang melakukan pengelompokan berdasarkan column_name1.
- "[, nama_kolom2,…]" bersifat opsional; mewakili nama kolom lain saat pengelompokan dilakukan pada lebih dari satu kolom.
- "[HAVING condition]" bersifat opsional; ini digunakan untuk membatasi baris yang dipengaruhi oleh klausa GROUP BY. Ini mirip dengan klausa WHERE.
Pengelompokan menggunakan Kolom Tunggal
Untuk membantu memahami pengaruh klausa SQL Group By, mari jalankan kueri sederhana yang mengembalikan semua entri gender dari tabel anggota.
SELECT `gender` FROM `members` ;
gender |
---|
Female |
Female |
Male |
Female |
Male |
Male |
Male |
Male |
Male |
Misalkan kita ingin mendapatkan nilai unik untuk jenis kelamin. Kita bisa menggunakan query berikut -
SELECT `gender` FROM `members` GROUP BY `gender`;
Menjalankan skrip di atas di meja kerja MySQL terhadap Myflixdb memberi kita hasil sebagai berikut.
gender |
---|
Female |
Male |
Perhatikan bahwa hanya dua hasil yang dikembalikan. Ini karena kami hanya memiliki dua tipe gender Pria dan Wanita. Klausa GROUP BY dalam SQL mengelompokkan semua anggota "Pria" menjadi satu dan hanya mengembalikan satu baris untuk itu. Hal yang sama terjadi pada anggota "Wanita".
Pengelompokan menggunakan banyak kolom
Misalkan kita ingin mendapatkan daftar film category_id dan tahun yang sesuai saat film tersebut dirilis.
Mari kita amati keluaran dari kueri sederhana 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 memiliki banyak duplikat.
Mari kita jalankan kueri yang sama menggunakan group by di SQL -
SELECT `category_id`,`year_released` FROM `movies` GROUP BY `category_id`,`year_released`;
Menjalankan skrip di atas di meja kerja MySQL terhadap myflixdb memberi kita hasil berikut yang ditunjukkan di bawah ini.
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 dirilis untuk mengidentifikasi baris unik dalam contoh di atas.
Jika id kategori sama tetapi tahun rilis berbeda, maka baris dianggap unik. Jika id kategori dan tahun rilis sama untuk lebih dari satu baris, maka itu dianggap duplikat dan hanya satu baris ditampilkan.
Pengelompokan dan fungsi agregat
Misalkan kita ingin jumlah laki-laki dan perempuan dalam database kita. Kita dapat menggunakan skrip berikut yang ditunjukkan di bawah ini untuk melakukan itu.
SELECT `gender`,COUNT(`membership_number`) FROM `members` GROUP BY `gender`;
Menjalankan skrip di atas di meja kerja MySQL terhadap myflixdb memberi kita hasil sebagai berikut.
gender | COUNT('membership_number') |
---|---|
Female | 3 |
Male | 5 |
Hasil yang ditampilkan di bawah ini dikelompokkan berdasarkan setiap nilai jenis kelamin unik yang diposting dan jumlah baris yang dikelompokkan dihitung menggunakan fungsi agregat COUNT.
Membatasi hasil kueri menggunakan klausa HAVING
Tidak selalu kami ingin melakukan pengelompokan pada semua data dalam tabel tertentu. Akan ada kalanya kita ingin membatasi hasil kita pada kriteria tertentu. Dalam kasus seperti itu, kita dapat menggunakan klausa HAVING
Misalkan kita ingin mengetahui semua tahun rilis untuk kategori film id 8. Kita akan menggunakan script berikut untuk mencapai hasil kita.
SELECT * FROM `movies` GROUP BY `category_id`,`year_released` HAVING `category_id` = 8;
Menjalankan skrip di atas di meja kerja MySQL terhadap Myflixdb memberi kita hasil berikut yang ditunjukkan di bawah ini.
movie_id | title | director | year_released | category_id |
---|---|---|---|---|
9 | Honey mooners | John Schultz | 2005 | 8 |
5 | Daddy's Little Girls | NULL | 2007 | 8 |
Perhatikan bahwa hanya film dengan kategori id 8 yang terpengaruh oleh klausa GROUP BY kami.
Ringkasan
- GROUP BY Clause SQL digunakan untuk mengelompokkan baris dengan nilai yang sama.
- Klausa GROUP BY digunakan bersama dengan pernyataan SQL SELECT.
- Pernyataan SELECT yang digunakan dalam klausa GROUP BY hanya dapat digunakan berisi nama kolom, fungsi agregat, konstanta, dan ekspresi.
- SQL Having Clause digunakan untuk membatasi hasil yang dikembalikan oleh klausa GROUP BY.
- MYSQL GROUP BY Clause digunakan untuk mengumpulkan data dari beberapa catatan dan mengembalikan catatan yang ditetapkan oleh satu atau lebih kolom.