Lưu tổng tính toán vào biến và cập nhật hàng cụ thể trong MySQL
Sử dụng biến user-defined (@Total) để lưu kết quả SUM(), sau đó UPDATE gán giá trị đó vào hàng mục tiêu (ví dụ: hàng cuối cùng).
1. Tạo bảng và chèn dữ liệu
mysql> CREATE TABLE DemoTable (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
Value INT
);
mysql> INSERT INTO DemoTable (Value) VALUES (70), (100), (150), (250), (60);
2. Xem dữ liệu
mysql> SELECT * FROM DemoTable;
+----+-------+ | Id | Value | +----+-------+ | 1 | 70 | | 2 | 100 | | 3 | 150 | | 4 | 250 | | 5 | 60 | +----+-------+
3. Tính tổng và lưu vào biến
mysql> SET @Total = (SELECT SUM(Value) FROM DemoTable);
Kết quả: Query OK, 0 rows affected (@Total = 630)
4. Cập nhật hàng Id=5 (hàng cuối) với giá trị tổng
mysql> UPDATE DemoTable
SET Value = @Total
WHERE Id = 5;
Kết quả: Query OK, 1 row affected
5. Kiểm tra kết quả
mysql> SELECT * FROM DemoTable;
+----+-------+ | Id | Value | +----+-------+ | 1 | 70 | | 2 | 100 | | 3 | 150 | | 4 | 250 | | 5 | 630 | ← Tổng: 70+100+150+250+60 = 630 +----+-------+
Giải thích:
SET @Total = (SELECT SUM(Value) FROM DemoTable): Gán kết quả scalar vào biến sessionUPDATE ... SET Value = @Total WHERE Id = 5: Dùng biến trong UPDATE- Biến @Total tồn tại suốt session
Cách thay thế (MySQL 8.0+ CTE):
WITH total_cte AS (SELECT SUM(Value) AS total FROM DemoTable) UPDATE DemoTable d CROSS JOIN total_cte t SET d.Value = t.total WHERE d.Id = 5;
Ứng dụng: Tính toán tổng, trung bình, max/min rồi lưu vào hàng summary/total row.