Cara Pakai HAVING MySQL: Bedanya dengan WHERE & Contoh Query

1. Apa itu klausa HAVING

Klausa HAVING adalah sintaks dalam SQL yang digunakan untuk menambahkan kondisi pada hasil agregasi setelah data dikelompokkan. Biasanya digunakan bersama dengan klausa GROUP BY dan berfungsi untuk memfilter data setelah agregasi. Dengan menggunakan klausa HAVING, Anda dapat mengekstrak hanya grup yang memenuhi kriteria tertentu. Misalnya, HAVING digunakan ketika ingin mengekstrak pelanggan dengan total penjualan melebihi jumlah tertentu atau grup dengan skor rata-rata melebihi tingkat tertentu. Berbeda dengan klausa WHERE yang menambahkan kondisi pada baris individual sebelum agregasi, HAVING menerapkan kondisi pada hasil setelah agregasi.

Contoh penggunaan HAVING

Misalnya, query untuk mengekstrak pelanggan dengan total penjualan lebih dari 10.000 yen adalah sebagai berikut.
SELECT PelangganID, SUM(Penjualan) AS TotalPenjualan
FROM TabelPenjualan
GROUP BY PelangganID
HAVING SUM(Penjualan) > 10000;
Query ini menggunakan fungsi SUM untuk menjumlahkan penjualan masing-masing pelanggan, dan mengekstrak hanya pelanggan yang hasilnya melebihi 10.000 yen.

2. Sintaks Dasar dan Cara Menggunakan Klausa HAVING

Sintaks dasar klausa HAVING adalah sebagai berikut.
SELECT namaKolom, fungsiAgregat(namaKolom)
FROM namaTabel
GROUP BY namaKolom
HAVING ekspresiKondisi;
Sintaks ini mengelompokkan data dengan klausa GROUP BY dan memfilter hasil agregasi dengan klausa HAVING yang menentukan kondisi. Sebagai contoh, query untuk mengekstrak pelanggan yang memiliki jumlah pesanan 5 atau lebih dari tabel penjualan adalah sebagai berikut.
SELECT IDPelanggan, COUNT(IDPesanan) AS jumlahPesanan
FROM tabelPesanan
GROUP BY IDPelanggan
HAVING COUNT(IDPesanan) >= 5;
Di sini, fungsi COUNT digunakan untuk menghitung jumlah pesanan per pelanggan, dan hanya memfilter pelanggan dengan jumlah pesanan 5 atau lebih.

3. Contoh Penerapan HAVING

HAVING clause adalah alat yang berguna untuk analisis data lanjutan ketika digabungkan dengan fungsi agregat. Berikut ini beberapa contoh penerapan yang spesifik.

Contoh 1: Penyaringan Berdasarkan Total Penjualan

Untuk mengekstrak produk dengan penjualan lebih dari 10.000 yen, gunakan fungsi SUM seperti berikut.
SELECT ID Produk, SUM(Penjualan) AS Total Penjualan
FROM Tabel Produk
GROUP BY ID Produk
HAVING SUM(Penjualan) > 10000;
Query ini menghitung total penjualan per produk, dan mengekstrak produk yang totalnya melebihi 10.000 yen.

Contoh 2: Penyaringan Berdasarkan Jumlah Pesanan

Jika pelanggan tertentu melakukan 10 atau lebih pesanan, pelanggan tersebut akan diekstrak.
SELECT ID Pelanggan, COUNT(ID Pesanan) AS Jumlah Pesanan
FROM Tabel Pesanan
GROUP BY ID Pelanggan
HAVING COUNT(ID Pesanan) > 10;
Query ini menghitung jumlah pesanan per pelanggan, dan mengekstrak hanya pelanggan yang melakukan 10 atau lebih pesanan.

4. Perbedaan dengan klausa WHERE

Klausa HAVING dan WHERE keduanya melakukan penyaringan data, tetapi waktu penerapannya berbeda.

Perbedaan Waktu Penerapan

  • klausa WHERE: Diterapkan sebelum pengelompokan data, dan melakukan penyaringan pada setiap baris.
  • klausa HAVING: Diterapkan setelah pengelompokan data, dan melakukan penyaringan pada hasil agregasi.
Misalnya, dalam query yang menggabungkan klausa WHERE dan HAVING, pertama data dengan penjualan ≥ 1000 yen disaring dengan klausa WHERE, kemudian hasil dengan total penjualan > 5.000 yen disaring dengan klausa HAVING.
SELECT IDPelanggan, SUM(penjualan) AS total_penjualan
FROM tabel_penjualan
WHERE penjualan >= 1000
GROUP BY IDPelanggan
HAVING SUM(penjualan) > 5000;
Dalam query ini, data yang telah disaring dengan klausa WHERE kemudian diterapkan GROUP BY dan HAVING, sehingga hanya pelanggan dengan penjualan ≥ 5.000 yen yang diambil.

5. Catatan saat menggunakan klausa HAVING

Perlu digabungkan dengan fungsi agregat

HAVING clause melakukan penyaringan pada hasil agregasi, sehingga perlu digabungkan dengan fungsi agregat seperti SUM atau COUNT. Untuk kondisi pada baris individual, sebaiknya gunakan klausa WHERE.

Penggunaan alias

Pada klausa HAVING, Anda dapat menulis ekspresi kondisi dengan menggunakan alias yang ditentukan menggunakan AS. Misalnya, Anda dapat memberi alias pada total penjualan seperti berikut.
SELECT ID_Pelanggan, SUM(penjualan) AS total_penjualan
FROM tabel_penjualan
GROUP BY ID_Pelanggan
HAVING total_penjualan > 10000;
Query ini mengekstrak pelanggan dengan total penjualan lebih dari 10.000 yen.

6. Ringkasan: Cara Menggunakan Klausa HAVING

Klausa HAVING adalah alat yang kuat untuk menambahkan kondisi pada data agregat dan memfilter data secara fleksibel. Terutama, saat menganalisis data agregat seperti penjualan atau jumlah pesanan, memanfaatkan klausa HAVING memungkinkan analisis data yang efisien. Dengan memahami perbedaan dengan klausa WHERE dan menggabungkannya secara tepat, Anda dapat memaksimalkan fleksibilitas kueri SQL.