- WHERE: Lọc hàng trước khi gom nhóm. Không dùng với hàm tổng hợp (aggregate).
- HAVING: Lọc nhóm sau khi gom nhóm (
GROUP BY). Có thể dùng với hàm tổng hợp.
Ví dụ
mysql> CREATE TABLE WhereDemo (Price INT);
Query OK, 0 rows affected (0.64 sec)
mysql> INSERT INTO WhereDemo VALUES(100),(200),(300),(400);
Query OK, 4 rows affected
mysql> SELECT * FROM WhereDemo;
+-------+
| Price |
+-------+
| 100 |
| 200 |
| 300 |
| 400 |
+-------+
4 rows in set (0.00 sec)
HAVING với aggregate
mysql> SELECT SUM(Price) FROM WhereDemo HAVING SUM(Price) > 500;
+------------+
| SUM(Price) |
+------------+
| 1000 |
+------------+
1 row in set (0.00 sec)
WHERE với aggregate → LỖI
mysql> SELECT SUM(Price) FROM WhereDemo WHERE SUM(Price) > 200;
ERROR 1111 (HY000): Invalid use of group function