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

เพิ่ม Subtotal (ผลรวมสะสม) ลงในคอลัมน์ที่เป็น NULL ใน MySQL

ใช้ 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;