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

MySQL: UPDATE ตารางคำนวณ SUM แล้วเก็บไว้ที่แถวสุดท้าย


คำอธิบาย

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

คำอธิบาย

  1. SET @Total = (SELECT SUM(Value) FROM DemoTable): คำนวณ 70+100+150+250+60 = 630 เก็บใน @Total
  2. UPDATE ... SET Value = @Total WHERE Id = 5: อัปเดตแถว Id=5 ให้เป็น 630
  3. แถวอื่นไม่เปลี่ยนแปลง

กรณีใช้งานจริง

  • เก็บ Running Total หรือ Grand Total ไว้ในแถวสรุป
  • Materialized View แบบ Manual
  • Trigger อาจเหมาะสมกว่าสำหรับ Real-time