Nhóm dữ liệu, lọc theo tổng và sắp xếp trong một truy vấn MySQL
Kết hợp GROUP BY (nhóm), HAVING (lọc nhóm), BETWEEN (khoảng giá trị) và ORDER BY (sắp xếp) để báo cáo tổng chi tiêu khách hàng trong khoảng xác định.
1. Tạo bảng và chèn dữ liệu
mysql> CREATE TABLE DemoTable (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
CustomerName VARCHAR(20),
ProductPrice INT
);
mysql> INSERT INTO DemoTable (CustomerName, ProductPrice) VALUES
('Chris', 600), ('David', 450), ('Chris', 980),
('Mike', 1200), ('Chris', 400), ('David', 1200);
2. Xem dữ liệu
mysql> SELECT * FROM DemoTable;
+----+--------------+--------------+ | Id | CustomerName | ProductPrice | +----+--------------+--------------+ | 1 | Chris | 600 | | 2 | David | 450 | | 3 | Chris | 980 | | 4 | Mike | 1200 | | 5 | Chris | 400 | | 6 | David | 1200 | +----+--------------+--------------+
3. Truy vấn: Khách hàng có tổng chi tiêu từ 1600 đến 2000, sắp xếp tên giảm dần
mysql> SELECT CustomerName, SUM(ProductPrice) AS Total_Price
FROM DemoTable
GROUP BY CustomerName
HAVING SUM(ProductPrice) BETWEEN 1600 AND 2000
ORDER BY CustomerName DESC;
4. Kết quả
+--------------+-------------+ | CustomerName | Total_Price | +--------------+-------------+ | David | 1650 | | Chris | 1980 | +--------------+-------------+
Phân tích:
- Chris: 600 + 980 + 400 = 1980 (trong khoảng 1600-2000) ✓
- David: 450 + 1200 = 1650 (trong khoảng) ✓
- Mike: 1200 (ngoài khoảng) ✗
- Sắp xếp DESC: David (D) trước Chris (C)
Quy tắc thực thi:
FROM+WHERE(lọc hàng)GROUP BY(nhóm hàng)HAVING(lọc nhóm - dùng hàm tổng hợp)SELECT(chọn cột/hàm tổng hợp)ORDER BY(sắp xếp kết quả)