Execution order là chìa khóa: WHERE chạy TRƯỚC GROUP BY (lọc individual rows), HAVING chạy SAU (lọc groups).
- WHERE không dùng được aggregate vì aggregation chưa xảy ra —
WHERE COUNT(*) > 5là syntax error. - HAVING dùng được aggregate:
HAVING COUNT(*) > 5,HAVING SUM(amount) > 1000.
Ví dụ rõ ràng: SELECT dept, COUNT() FROM employees WHERE salary > 50000 GROUP BY dept HAVING COUNT() > 3 — WHERE loại employees lương thấp trước, GROUP BY nhóm, HAVING giữ dept có > 3 employees lương cao.