目次
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 klausaGROUP 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 fungsiSUM
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.
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 sepertiSUM
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 menggunakanAS
. 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.