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

MySQL: ผลรวมสะสม (Running Total) ด้วย CROSS JOIN และ Session Variable

การคำนวณ Running Total ด้วย CROSS JOIN

ใช้ CROSS JOIN (SELECT @sum := 0) AS init เพื่อ Initialize Variable แล้วคำนวณสะสมใน SELECT

ตัวอย่าง

mysql> create table DemoTable(Value int);
Query OK, 0 rows affected (1.79 sec)
mysql> insert into DemoTable values(50);
mysql> insert into DemoTable values(20);
mysql> insert into DemoTable values(30);

คำสั่ง Running Total (เรียงตาม Value)

mysql> select t.Value, 
    (@s := @s + t.Value) as Number
    from DemoTable t 
    cross join (select @s := 0) p 
    order by t.Value;

ผลลัพธ์:

+-------+--------+
| Value | Number |
+-------+--------+
| 20    | 20     |
| 30    | 50     |
| 50    | 100    |
+-------+--------+

คำอธิบาย

  1. CROSS JOIN (SELECT @s := 0) p - สร้าง Derived Table ที่มี Variable @s = 0
  2. @s := @s + t.Value - อัปเดต Variable และคืนค่าใหม่ (Assignment ใน SELECT)
  3. ORDER BY t.Value - เรียงก่อนคำนวณ เพื่อให้ Running Total ตามลำดับ Value

MySQL 8.0+: Window Function (แนะนำ)

SELECT 
    Value,
    SUM(Value) OVER (ORDER BY Value) AS running_total
FROM DemoTable;

ให้ผลลัพธ์เดียวกัน แต่เป็นมาตรฐาน อ่านง่าย ไม่ต้องจัดการ Variable

สรุป

MySQL < 8.0: ใช้ CROSS JOIN (SELECT @var := 0) + @var := @var + col MySQL 8.0+: ใช้ SUM() OVER (ORDER BY ...)