ใช้ User-Defined Variable (@var) ร่วมกับ UPDATE เพื่อคำนวณ Running Total (Subtotal) แทนค่า NULL
ตัวอย่างการใช้งาน
1. สร้างตารางมีคอลัมน์ SubTotal เป็น NULL
mysql> create table DemoTable (Amount int, SubTotal int); mysql> insert into DemoTable(Amount) values(50), (60), (70), (80);
2. ข้อมูลก่อนอัปเดต
+--------+----------+ | Amount | SubTotal | +--------+----------+ | 50 | NULL | | 60 | NULL | | 70 | NULL | | 80 | NULL | +--------+----------+
3. คำนวณ Subtotal ด้วย Variable
mysql> SET @sum := 0; mysql> UPDATE DemoTable SET SubTotal = (@sum := @sum + Amount);
ผลลัพธ์หลังอัปเดต
+--------+----------+ | Amount | SubTotal | +--------+----------+ | 50 | 50 | | 60 | 110 | | 70 | 180 | | 80 | 260 | +--------+----------+
วิธีสมัยใหม่: Window Functions (MySQL 8.0+)
SELECT
Amount,
SUM(Amount) OVER (ORDER BY Id ROWS UNBOUNDED PRECEDING) AS SubTotal
FROM DemoTable;
ข้อดี: ไม่ต้อง UPDATE ข้อมูลจริง, คำนวณได้แบบ Real-time, รองรับ PARTITION BY
กรณีต้องการเก็บถาวร
ใช้ Generated Column (MySQL 5.7+):
ALTER TABLE DemoTable
ADD COLUMN SubTotal INT GENERATED ALWAYS AS (
(SELECT SUM(Amount) FROM DemoTable t2 WHERE t2.Id <= DemoTable.Id)
) STORED;