Navicat Blog

Memfilter Field Agregasi Menggunakan Klausa Having Oct 8, 2024 by Robert Gravelle

Jika Anda telah menulis query SQL selama beberapa waktu, Anda mungkin cukup familiar dengan klausa WHERE. Meskipun klausa ini tidak memiliki efek pada kolom agregat, ada cara untuk memfilter data menurut nilai agregat, yaitu dengan menggunakan klausa HAVING. Blog ini akan membahas cara kerjanya serta memberikan beberapa contoh tentang penggunaannya dalam query SELECT.

Aggregation and the HAVING Clause

Agregasi biasanya digunakan bersama dengan pengelompokan. Dalam SQL, hal itu dilakukan dengan menggunakan klausa GROUP BY. Agregasi, bersama dengan pengelompokan, memungkinkan kita untuk memperoleh insight tingkat tinggi ke dalam data kita. Misalnya, perusahaan eCommerce mungkin ingin melacak penjualan selama periode waktu tertentu.

Dalam banyak kasus, kita mungkin tidak ingin menerapkan klausa GROUP BY pada seluruh kumpulan data. Dalam kasus tersebut, kita dapat menggunakan perintah GROUP BY bersama dengan klausa HAVING bersyarat untuk menyaring hasil yang tidak diinginkan. Mirip dengan klausa WHERE, HAVING menentukan satu atau beberapa kondisi penyaringan, tetapi untuk kelompok atau agregasi. Dengan demikian, HAVING selalu ditempatkan setelah klausa WHERE dan GROUP BY tetapi sebelum klausa ORDER BY (opsional):

SELECT column_list
FROM table_name
WHERE where_conditions
GROUP BY column_list
HAVING having_conditions
ORDER BY order_expression

Beberapa Contoh Praktikal

Untuk mendapatkan ide yang lebih baik tentang bagaimana HAVING bekerja, mari jalankan beberapa query SELECT terhadap Sakila Sample Database.

Query pertama kita mencantumkan penyewa film teratas, diurutkan dalam urutan menurun, sehingga orang dengan penyewaan terbanyak muncul di bagian atas. Kita akan menggunakan klausa HAVING untuk menghapus pelanggan dengan kurang dari tiga penyewaan untuk mempersingkat daftar:

SELECT
  c.customer_id,
  c.first_name,
  c.last_name,
  COUNT(r.rental_id) AS total_rentals
FROM 
  customer AS c
    LEFT JOIN rental AS r ON c.customer_id = r.customer_id
GROUP BY c.customer_id
HAVING total_rentals >= 3
ORDER BY total_rentals DESC;

Berikut adalah query dan halaman pertama dari hasil di Navicat Premium:

top movie renters (89K)

Dilihat dari jumlah penyewaan tersebut, kita seharusnya dapat mempersempit daftarnya secara signifikan!/p>

Memfilter Baris Dengan Baik WHERE dan HAVING

Sama seperti GROUP BY dan ORDER BY yang diterapkan pada titik yang berbeda dalam proses pencarian, demikian pula WHERE dan HAVING. Oleh karena itu, kita dapat menyertakan keduanya untuk memfilter hasil sebelum dan sesudah pengelompokan dan agregasi. Sebagai contoh, kita dapat menambahkan klausa WHERE untuk membatasi hasil pada paruh pertama tahun tertentu:

SELECT
  c.customer_id,
  c.first_name,
  c.last_name,
  COUNT(r.rental_id) AS total_rentals
FROM 
  customer AS c
    LEFT JOIN rental AS r ON c.customer_id = r.customer_id
WHERE r.rental_date BETWEEN '2005-01-01' AND '2005-06-30'
GROUP BY c.customer_id
HAVING total_rentals >= 3
ORDER BY total_rentals DESC;

Sekali lagi, berikut adalah query di atas dan halaman pertama hasil di Navicat Premium:

top movie renters for first half of 2005 (96K)

Mengkombinasikan Beberapa Kondisi

Sama seperti klausa WHERE yang mensupport beberapa kondisi menggunakan kata kunci AND dan OR, HAVING juga demikian. Sebagai contoh, kita dapat menemukan pelanggan yang nomor sewanya berada dalam rentang tertentu dengan memodifikasi klausa HAVING menjadi seperti berikut:

HAVING total_rentals >= 3 AND total_rentals <= 10

Kesimpulan

Pada blog hari ini kita mempelajari bagaimana untuk memfilter field yang dikelompokkan dan diagregat menggunakan klausa HAVING.

Tertarik pada Navicat Premium? Anda dapat mencobanya selama 14 hari sepenuhnya gratis untuk tujuan evaluasi!

Navicat Blog
Feed Entri
Arsip Blog
Bagikan