Klausa SQL GROUP BY dan HAVING dengan Contoh
Apa itu Grup SQL berdasarkan Klausul?
Klausa GROUP BY adalah perintah SQL yang digunakan untuk mengelompokkan baris-baris yang mempunyai 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 OLEH Sintaks
Sekarang kita tahu apa itu klausa SQL GROUP BY, mari kita lihat sintaks dasar grup berdasarkan kueri.
SELECT statements... GROUP BY column_name1[,column_name2,...] [HAVING condition];
SINI
- “Pernyataan SELECT…” adalah kueri perintah SQL SELECT standar.
- "KELOMPOK OLEH kolom_nama1” adalah klausa yang melakukan pengelompokan berdasarkan nama_kolom1.
- “[,column_name2,…]” adalah opsional; mewakili nama kolom lain bila pengelompokan dilakukan pada lebih dari satu kolom.
- “[Kondisi MEMILIKI]” adalah opsional; ini digunakan untuk membatasi baris yang dipengaruhi oleh klausa GROUP BY. Hal ini mirip dengan klausa WHERE.
Pengelompokan menggunakan a Kolom tunggal
Untuk membantu memahami efek klausa SQL Group By, mari kita 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 dapat menggunakan query berikut –
SELECT `gender` FROM `members` GROUP BY `gender`;
Menjalankan skrip di atas dalam MySQL meja kerja terhadap Myflixdb memberi kita hasil berikut.
gender |
---|
Female |
Male |
Perhatikan 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” dan hanya mengembalikan satu baris saja. Itu melakukan hal yang sama dengan anggota “Wanita”.
Pengelompokan menggunakan beberapa kolom
Misalkan kita ingin mendapatkan daftar kategori_id film dan tahun rilisnya.
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 dalam MySQL workbench terhadap myflixdb memberi kita hasil seperti 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 rilis untuk mengidentifikasi unik baris dalam contoh kita di atas.
Jika id kategori sama tetapi tahun rilis berbeda, maka satu baris dianggap unik. Jika id kategori dan tahun rilis sama untuk lebih dari satu baris, maka dianggap duplikat dan hanya satu baris ditampilkan.
Pengelompokan dan fungsi agregat
Misalkan kita ingin mengetahui jumlah total pria dan wanita dalam basis data kita. Kita dapat menggunakan skrip berikut yang ditunjukkan di bawah ini untuk melakukannya.
SELECT `gender`,COUNT(`membership_number`) FROM `members` GROUP BY `gender`;
Menjalankan skrip di atas dalam MySQL workbench terhadap myflixdb memberi kita hasil berikut.
gender | COUNT('membership_number') |
---|---|
Female | 3 |
Male | 5 |
Hasil yang ditunjukkan di bawah ini dikelompokkan berdasarkan setiap nilai gender unik yang diposting dan jumlah baris yang dikelompokkan dihitung menggunakan fungsi agregat COUNT.
Membatasi hasil kueri menggunakan MEMILIKI ayat
Kita tidak selalu ingin melakukan pengelompokan pada semua data dalam tabel tertentu. Akan ada saatnya kita ingin membatasi hasil kita pada kriteria tertentu. Dalam kasus seperti ini, kita dapat menggunakan klausa HAVING
Misalkan kita ingin mengetahui semua tahun rilis untuk kategori film id 8. Kita akan menggunakan skrip berikut untuk memperoleh hasil kita.
SELECT * FROM `movies` GROUP BY `category_id`,`year_released` HAVING `category_id` = 8;
Menjalankan skrip di atas dalam MySQL workbench terhadap Myflixdb memberi kita hasil seperti 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 hanya film dengan id kategori 8 yang terpengaruh oleh klausa GROUP BY kami.
Ringkasan
- Klausul GROUP BY SQL digunakan untuk mengelompokkan baris dengan nilai yang sama.
- Klausul 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.
- Klausa Memiliki SQL digunakan untuk membatasi hasil yang dikembalikan oleh klausa GROUP BY.
- Klausa MYSQL GROUP BY digunakan untuk mengumpulkan data dari beberapa rekaman dan mengembalikan kumpulan rekaman berdasarkan satu kolom atau lebih.