Kesimpulan Dengan Klausa HAVING - MySQL Dasar #58

Selanjutnya disini kita akan melakukan kesimpulan grup dengan kriteria tertentu. Disini kita akan menggunakan klausa having. Dimisalkan disini Anda ingin menghitung nama supir yang melakukan perjalanan lebih dari 1 kali didalam tabel daftar_supir. 


Pada kasus ini Anda tidak bisa menggunakan klausa WHERE pada nilai – nilai yang melibatkan kesimpulan. Dan mungkin Anda akan terpikir untuk menggunakan query berikut :
MariaDB [root93]> SELECT nama, COUNT(*) FROM
    -> daftar_supir
    -> WHERE COUNT(*)>1
    -> GROUP by nama;
ERROR 1111 (HY000): Invalid use of group function
MariaDB [root93]> 
Terjadi error pada query diatas yaitu dikarenakan klausa WHERE menetapkan kekangan awal yang menentukan baris-baris mana yang akan diseleksi, sedangkan COUNT() hanya dapat ditentukan setelah baris-baris diseleksi. Untuk mengatasi masalah tersebut maka Anda dapat menggunakan klausa HAVING.

Perlu dipahami bahwa klausa HAVING dapat diterapkan karateristik grup (kesimpulan grup), bukan rekaman tunggal, sehingga query sebelumnya dapat Anda tulis seperti berikut :

MariaDB [root93]> SELECT nama, COUNT(*)
    -> FROM daftar_supir
    -> GROUP by nama
    -> HAVING COUNT(*)>1;
+-------+----------+
| nama  | COUNT(*) |
+-------+----------+
| Ben   |        2 |
| Henri |        2 |
| Henry |        4 |
| Susi  |        2 |
+-------+----------+
4 rows in set (0.038 sec)
Klausa WHERE masih dapat digunakan pada kesimpulan group atau bisa digunakan bersamaan dengan klausa HAVING. Tetapi klausa WHERE hanya untuk memilih baris – baris, bukan untuk menguji nilai kesimpulan group. HAVING dapat mengakses alias. Anda dapat menuliskan querynya seperti berikut :
MariaDB [root93]> SELECT COUNT(*) AS alias, nama
    -> FROM daftar_supir
    -> GROUP by nama
    -> HAVING alias>1;
+-------+-------+
| alias | nama  |
+-------+-------+
|     2 | Ben   |
|     2 | Henri |
|     4 | Henry |
|     2 | Susi  |
+-------+-------+
4 rows in set (0.001 sec)
MariaDB [root93]> SELECT COUNT(*), nama
    -> FROM daftar_supir
    -> WHERE nama='Henry'
    -> GROUP by nama
    -> HAVING COUNT(*)>2;
+----------+-------+
| COUNT(*) | nama  |
+----------+-------+
|        4 | Henry |
+----------+-------+
1 row in set (0.001 sec)
Baca Selanjutnya :  Menentukan Keunikan Nilai - MySQL Dasar #59

0 Response to "Kesimpulan Dengan Klausa HAVING - MySQL Dasar #58"

Post a Comment

Komentar yang Anda kirim akan terlebih dahulu di moderasi oleh Admin