Masalah:
Anda ingin menemukan grup baris dengan jumlah entri tertentu dalam grup.
Contoh:
Basis data kami memiliki tabel bernama product
dengan data pada kolom berikut:id
, name
dan category
.
id | nama | kategori |
---|---|---|
1 | sofa | mebel |
2 | sarung tangan | pakaian |
3 | Kaos | pakaian |
4 | kursi | mebel |
5 | meja | mebel |
6 | tonton | elektronik |
7 | kursi berlengan | mebel |
8 | rok | pakaian |
9 | penerima radio | elektronik |
Mari temukan kategori produk dengan lebih dari dua entri.
Solusi:
SELECT category, COUNT(id) FROM product GROUP BY category HAVING COUNT(id)>2;
Berikut adalah hasilnya:
kategori | hitung |
---|---|
furnitur | 4 |
pakaian | 3 |
Diskusi:
Untuk memfilter record menurut jumlah baris yang diberikan dalam grup, gunakan klausa HAVING. Ini memfilter baris menggunakan fungsi agregat kondisi seperti COUNT. Pertama, di SELECT, gunakan nama kolom atau kolom untuk mengelompokkan baris (ini adalah kategori dalam contoh kita), lalu tempatkan fungsi agregat COUNT, yang menghitung jumlah record di setiap grup. Untuk menghitung jumlah baris, gunakan kolom id yang menyimpan nilai unik (dalam contoh kami, kami menggunakan COUNT(id)
). Selanjutnya, gunakan klausa GROUP BY untuk mengelompokkan record menurut kolom (GROUP BY
kategori di atas). Setelah menggunakan GROUP BY untuk memfilter record dengan fungsi agregat seperti COUNT, gunakan klausa HAVING. Itu selalu digunakan setelah klausa GROUP BY. Dalam HAVING, kami menggunakan kondisi untuk membandingkan nilai dengan nilai yang dikembalikan oleh fungsi agregat. Dalam contoh, kami membandingkan apakah COUNT(id) mengembalikan nilai yang lebih tinggi dari dua. Jika benar, kategori dikembalikan dengan jumlah produk.