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

MySQL SELECT cột tích lũy (running sum)?

Tính tổng tích lũy (running total) trong MySQL

Sử dụng biến người dùng (user-defined variable) để tính running sum trong một truy vấn SELECT duy nhất.

Tạo bảng và dữ liệu

mysql> CREATE TABLE accumulatedDemo (Value INT);

mysql> INSERT INTO accumulatedDemo VALUES (10), (15), (20), (25), (45);

Dữ liệu:

+-------+
| Value |
+-------+
| 10    |
| 15    |
| 20    |
| 25    |
| 45    |
+-------+

Truy vấn tính tích lũy

mysql> SET @previousSum = 0;
mysql> SELECT Value, @previousSum := @previousSum + Value AS AccumulatedColumn
    -> FROM accumulatedDemo;

Kết quả:

+-------+-------------------+
| Value | AccumulatedColumn |
+-------+-------------------+
| 10    | 10                |
| 15    | 25                |
| 20    | 45                |
| 25    | 70                |
| 45    | 115               |
+-------+-------------------+

Giải thích

  • @previousSum := @previousSum + Value: Gán và trả về giá trị mới
  • Biến @previousSum giữ giá trị giữa các hàng
  • Phải SET @previousSum = 0 trước khi SELECT

Cách hiện đại (MySQL 8.0+ Window Functions)

SELECT Value, 
       SUM(Value) OVER (ORDER BY Id ROWS UNBOUNDED PRECEDING) AS AccumulatedColumn
FROM accumulatedDemo;

Ưu điểm: Không cần biến, chuẩn SQL, dễ đọc, song song hóa tốt hơn.

Ứng dụng thực tế

  • Báo cáo doanh thu tích lũy theo ngày/tháng
  • Tính số dư tài khoản sau mỗi giao dịch
  • Thống kê tồn kho chạy