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

Tính tổng cột có điều kiện trong MySQL (SUM với GROUP BY biểu thức)

MySQL cho phép GROUP BY theo **biểu thức (expression)**, không chỉ tên cột. Điều này hữu ích khi muốn gom nhóm theo phạm vi giá trị (ví dụ: theo chục, trăm, tháng, v.v.).

Ví dụ: Gom nhóm ProductId theo chục (div 10) và tính tổng giá

Tạo bảng:

mysql> CREATE TABLE DemoTable1489 (
    -> ProductId INT,
    -> ProductPrice INT
    -> );

Chèn dữ liệu:

mysql> INSERT INTO DemoTable1489 VALUES
    -> (100, 900),
    -> (115, 1000),
    -> (119, 2100),
    -> (125, 2100),
    -> (128, 2900);

Truy vấn: chia ProductId cho 10 (phép chia nguyên DIV), gom nhóm, tính tổng giá:

mysql> SELECT ProductId DIV 10 AS IdGroup, SUM(ProductPrice) AS TotalPrice
    -> FROM DemoTable1489
    -> GROUP BY ProductId DIV 10;

Kết quả:

+---------+-------------+
| IdGroup | TotalPrice  |
+---------+-------------+
|      10 |         900 |  -- ID 100-109
|      11 |        3100 |  -- ID 110-119: 1000+2100
|      12 |        5000 |  -- ID 120-129: 2100+2900
+---------+-------------+

Các biểu thức GROUP BY hữu ích khác

Mục đíchBiểu thức
Nhóm theo thángGROUP BY YEAR(cot_ngay), MONTH(cot_ngay) hoặc GROUP BY DATE_FORMAT(cot_ngay, '%Y-%m')
Nhóm theo quýGROUP BY QUARTER(cot_ngay)
Nhóm theo khoảng giáGROUP BY FLOOR(gia/1000) (mỗi nhóm 1000 đơn vị)
Nhóm theo phần nguyên chiaGROUP BY id DIV 100

Lưu ý hiệu năng

  • Biểu thức trong GROUP BY không dùng được index thông thường (trừ functional index MySQL 8.0+).
  • Với bảng lớn, cân nhắc tạo cột tính toán (generated column) + index.