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

Có thể dùng kết quả SUM() trong WHERE MySQL không? Dùng HAVING thay thế

Không dùng được SUM() trực tiếp trong WHERE (vì WHERE chạy trước GROUP BY). Phải dùng HAVING sau GROUP BY. Tạo bảng:

mysql> CREATE TABLE DemoTable (
    Name VARCHAR(50),
    Price INT
); Query OK, 0 rows affected (0.79 sec)

Chèn dữ liệu:

mysql> INSERT INTO DemoTable VALUES('Chris',30); Query OK, 1 row affected (0.15 sec)
mysql> INSERT INTO DemoTable VALUES('David',40); Query OK, 1 row affected (0.19 sec)
mysql> INSERT INTO DemoTable VALUES('Chris',10); Query OK, 1 row affected (0.12 sec)
mysql> INSERT INTO DemoTable VALUES('Mike',44);  Query OK, 1 row affected (0.14 sec)
mysql> INSERT INTO DemoTable VALUES('David',5);  Query OK, 1 row affected (0.17 sec)

Hiển thị dữ liệu:

mysql> SELECT * FROM DemoTable;

Kết quả:

+-------+-------+
| Name  | Price |
+-------+-------+
| Chris | 30    |
| David | 40    |
| Chris | 10    |
| Mike  | 44    |
| David | 5     |
+-------+-------+
5 rows in set (0.00 sec)

Truy vấn: nhóm theo Name, chỉ giữ nhóm có tổng Price > 40:

mysql> SELECT Name, SUM(Price) AS Total_Price 
FROM DemoTable GROUP BY Name HAVING Total_Price > 40;

Kết quả (Chris tổng 40 — không >40, bị loại):

+-------+-------------+
| Name  | Total_Price |
+-------+-------------+
| David | 45          |
| Mike  | 44          |
+-------+-------------+
2 rows in set (0.03 sec)

Quy tắc: WHERE lọc hàng trước khi gom nhóm; HAVING lọc nhóm sau khi gom nhóm.