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.