Anda di halaman 1dari 5

Bab 6

Penggunaan Kalusa Having

Dalam bab ini, kita akan melihat klausa HAVING. Ini mengikuti klausa GROUP BY
baik dalam sintaks (posisinya dalam pernyataan SELECT) dan di urutan penggunaan. Tujuannya
adalah sederhana setelah memahami GROUP BY dan kelompok baris. HAVING pada dasarnya
adalah sama seperti WHERE, dengan perbedaan bahwa HAVING bekerja pada kelompok baris.

HAVING Baris Filter Group

Tujuan dari klausa HAVING adalah untuk bertindak sebagai filter untuk kelompok baris
yang dihasilkan oleh klausa GROUP BY. Segala sesuatu yang kita belajar tentang kondisi-
bagaimana kondisi dievaluasi ke FALSE TRUE atau, bagaimana mereka dikombinasikan dengan
AND dan OR-dapat diterapkan pada HAVING clause juga. Satu-satunya perbedaan adalah
HAVING yang beroperasi di baris kelompok, bukan pada baris dari struktur tabular asli (yang
hilang sejak pengelompokan terjadi).
Gambar 6.1 "saat HAVING tepat di urutan eksekusi" menggambarkan pelaksanaan klausa
SELECT.

Gambar 6.1: Saat HAVING tepat di urutan eksekusi

Untuk mendemonstrasikan, mari kita gunakan salah satu pertanyaan GROUP BY dari Bab 5
"Klausul MENURUT KELOMPOK" dan tambahkan klausa HAVING:

6.1: Cart_12_GROUP_BY_with_HAVING.sql (kutipan)


SELECT
customers.name AS customer
, SUM(cartitems.qty) AS sumqty
, SUM(cartitems.qty
* items.price) AS totsales
FROM
customers
INNER JOIN carts
ON carts.customer_id = customers.id
INNER JOIN cartitems
ON cartitems.cart_id = carts.id
INNER JOIN items
ON items.id = cartitems.item_id
GROUP BY
customers.name
HAVING
SUM(cartitems.qty) > 5

Ini adalah query yang sama seperti yang kita digunakan untuk total, kecuali bahwa
WHERE telah dihapus (karena kita ingin semua barang yang akan dimasukkan dalam query ini).
Ingat, klausa WHERE bersifat opsional, jadi jika tidak ada satu, maka semua baris yang
dihasilkan oleh klausa DARI langsung masuk ke klausa GROUP BY. Kali ini baris-satunya
kelompok mana SUM (cartitems.qty)-suatu ekspresi fungsi agregat yang menghitung jumlah
item cart-lebih besar dari 5 yang disimpan. Semua yang lain akan dihapus.

Dalam contoh di atas, kondisi HAVING adalah kondisi tunggal: SUM (cartitems.qty)> 5.
Ini dikenal sebagai kondisi kelompok karena kondisi yang diterapkan pada kelompok baris.
Tujuannya adalah untuk kembali pelanggan dengan lebih dari lima barang yang dibeli
Gambar 6.2 "Klausa HAVING menyaring baris grup yang tidak diinginkan" menunjukkan
hasilnya.
Gambar 6.2: HAVING clause menyaring kelompok baris yang tidak diinginkan
 Kolom atau Agregat Ekspresi Dalam klausa SELECT ekspresi agregat SUM (cartitems.qty)
diberi kolom sumqty. Anda harus dapat menggunakan kolom bukan ekspresi fungsi agregat
dalam HAVING clause query's. Dengan demikian, HAVING sumqty> 5 dan HAVING SUM
(cartitems.qty)> 5 yang setara. Coba jalankan salah satu query pengelompokan dalam arsip kode
atau salah satu dari Anda sendiri, untuk konfirmasi. Perhatikan bahwa menggunakan kolom alias
tidak diijinkan dalam versi awal SQL.

Jika tidak ada HAVING clause dalam query, hasilnya pasti yang ditunjukkan pada

Gambar 6.3 "Tidak ada HAVING clause berarti kembali baris seluruh kelompok" semua baris
kelompok dikembalikan.
Gambar 6.3: Tidak ada HAVING clause berarti kembali semua baris grup
HAVING tanpa Klausul MENURUT KELOMPOK. Tidak lebih cepat dari beberapa orang
pertama kali belajar tentang klausa HAVING, mereka terjadi pada tersandung pada klausa
HAVING tanpa klausa GROUP BY. Tentu, mereka bingung, jika HAVING baris kelompok
filter, yang hanya dicapai dengan klausa GROUP BY, mengapa dan bagaimana cara kerjanya?

Ketika tidak ada GROUP BY klausa, semua baris dalam struktur tabel yang dihasilkan oleh
klausa DARI (opsional disaring oleh klausa WHERE), yang dianggap sebagai kelompok tunggal.

Anda mungkin juga menyukai