Pelajaran 24 / 37 · Pengelompokan

WHERE menyaring baris, HAVING menyaring grup

WHERE berjalan sebelum pengelompokan, jadi yang dilihatnya adalah pesanan satu per satu. HAVING berjalan sesudahnya dan melihat total per negara, karena itu HAVING bisa memakai sum(). Pesanan 107 (5.00) berhenti di WHERE, sedangkan grup GB berhenti di HAVING.

Query-nya

SELECT c.country, count(*) AS orders, sum(o.amount) AS revenue
FROM orders o
JOIN customers c ON c.id = o.customer_id
WHERE o.status = 'paid' AND o.amount > 10
GROUP BY c.country
HAVING sum(o.amount) > 100

Coba pindahkan o.amount > 10 ke HAVING: query-nya gagal, karena setelah pengelompokan sebuah negara tidak punya satu o.amount untuk diuji.

Berikutnya: Mencari duplikat dengan GROUP BY dan HAVING · Semua pelajaran