Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

คำนวณผลรวมสะสม (Running Total) ด้วย SUM() OVER ใน MySQL

ใช้ฟังก์ชันหน้าต่าง SUM() OVER (ORDER BY ...) เพื่อคำนวณผลรวมสะสมตามลำดับที่กำหนด

สร้างตารางตัวอย่าง

mysql> CREATE TABLE DemoTable (
    CustomerId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    CustomerValue INT
);

เพิ่มข้อมูล

mysql> INSERT INTO DemoTable(CustomerValue) VALUES (10);
mysql> INSERT INTO DemoTable(CustomerValue) VALUES (20);
mysql> INSERT INTO DemoTable(CustomerValue) VALUES (30);
mysql> INSERT INTO DemoTable(CustomerValue) VALUES (40);

ดูข้อมูลทั้งหมด

mysql> SELECT * FROM DemoTable;
+------------+---------------+
| CustomerId | CustomerValue |
+------------+---------------+
|          1 |            10 |
|          2 |            20 |
|          3 |            30 |
|          4 |            40 |
+------------+---------------+

คำสั่งคำนวณผลรวมสะสมตาม CustomerId

mysql> SELECT CustomerId,
    -> SUM(CustomerValue) OVER (ORDER BY CustomerId) AS SpecificSum
    -> FROM DemoTable;

ผลลัพธ์

+------------+-------------+
| CustomerId | SpecificSum |
+------------+-------------+
|          1 |          10 |
|          2 |          30 |
|          3 |          60 |
|          4 |         100 |
+------------+-------------+

คำอธิบาย: แถวที่ 1 = 10, แถวที่ 2 = 10+20=30, แถวที่ 3 = 30+30=60, แถวที่ 4 = 60+40=100

ต้องใช้ MySQL 8.0+ ที่รองรับ Window Functions