Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Cập nhật bảng: Tính tổng và gán vào cột cuối cùng trong MySQL

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 session
  • UPDATE ... 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.