Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

WHERE vs HAVING trong MySQL?


  • 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