คำอธิบาย
ใช้ User-defined Variable (@Total) เก็บผลรวม SUM แล้ว UPDATE แถวสุดท้าย (Id=5) ให้เก็บค่าผลรวมนั้น
ขั้นตอนการสร้างตารางและข้อมูลตัวอย่าง
mysql> create table DemoTable (
Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
Value int );
Query OK, 0 rows affected (0.61 sec)
การเพิ่มข้อมูล
mysql> insert into DemoTable(Value) values(70); Query OK, 1 row affected (0.10 sec) mysql> insert into DemoTable(Value) values(100); Query OK, 1 row affected (0.15 sec) mysql> insert into DemoTable(Value) values(150); Query OK, 1 row affected (0.15 sec) mysql> insert into DemoTable(Value) values(250); Query OK, 1 row affected (0.14 sec) mysql> insert into DemoTable(Value) values(60); Query OK, 1 row affected (0.22 sec)
แสดงข้อมูลก่อนอัปเดต
mysql> select * from DemoTable;
ผลลัพธ์:
+----+-------+ | Id | Value | +----+-------+ | 1 | 70 | | 2 | 100 | | 3 | 150 | | 4 | 250 | | 5 | 60 | +----+-------+ 5 rows in set (0.00 sec)
คำสั่งคำนวณ SUM และ UPDATE
mysql> set @Total = (select sum(Value) from DemoTable); Query OK, 0 rows affected (0.00 sec) mysql> update DemoTable set Value = @Total where Id = 5; Query OK, 1 row affected (0.16 sec) Rows matched: 1 Changed: 1 Warnings: 0
ตรวจสอบข้อมูลหลังอัปเดต
mysql> select * from DemoTable;
ผลลัพธ์:
+----+-------+ | Id | Value | +----+-------+ | 1 | 70 | | 2 | 100 | | 3 | 150 | | 4 | 250 | | 5 | 630 | +----+-------+ 5 rows in set (0.00 sec)
คำอธิบาย
SET @Total = (SELECT SUM(Value) FROM DemoTable): คำนวณ 70+100+150+250+60 = 630 เก็บใน @TotalUPDATE ... SET Value = @Total WHERE Id = 5: อัปเดตแถว Id=5 ให้เป็น 630- แถวอื่นไม่เปลี่ยนแปลง
กรณีใช้งานจริง
- เก็บ Running Total หรือ Grand Total ไว้ในแถวสรุป
- Materialized View แบบ Manual
- Trigger อาจเหมาะสมกว่าสำหรับ Real-time