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

GROUP BY, HAVING, ORDER BY: Lọc nhóm theo khoảng tổng giá trị trong MySQL

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:

  1. FROM + WHERE (lọc hàng)
  2. GROUP BY (nhóm hàng)
  3. HAVING (lọc nhóm - dùng hàm tổng hợp)
  4. SELECT (chọn cột/hàm tổng hợp)
  5. ORDER BY (sắp xếp kết quả)