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

Truy vấn MySQL lấy tổng mỗi cột khi mọi cột có cùng số lượng giá trị?

Sử dụng hàm tổng hợp SUM() cho từng cột trong một truy vấn đơn.

Tạo bảng

mysql> CREATE TABLE DemoTable (
    -> Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> FirstValue INT, SecondValue INT, ThirdValue INT
    -> );

Chèn dữ liệu (4 hàng, 3 cột số)

mysql> INSERT INTO DemoTable(FirstValue, SecondValue, ThirdValue) VALUES(10, 20, 30);
mysql> INSERT INTO DemoTable(FirstValue, SecondValue, ThirdValue) VALUES(60, 50, 40);
mysql> INSERT INTO DemoTable(FirstValue, SecondValue, ThirdValue) VALUES(80, 90, 100);
mysql> INSERT INTO DemoTable(FirstValue, SecondValue, ThirdValue) VALUES(20, 10, 0);

Xem dữ liệu

mysql> SELECT * FROM DemoTable;
+----+------------+-------------+------------+
| Id | FirstValue | SecondValue | ThirdValue |
+----+------------+-------------+------------+
| 1  | 10         | 20          | 30         |
| 2  | 60         | 50          | 40         |
| 3  | 80         | 90          | 100        |
| 4  | 20         | 10          | 0          |
+----+------------+-------------+------------+

Tổng từng cột

mysql> SELECT SUM(FirstValue), SUM(SecondValue), SUM(ThirdValue) FROM DemoTable;
+-----------------+------------------+-----------------+
| SUM(FirstValue) | SUM(SecondValue) | SUM(ThirdValue) |
+-----------------+------------------+-----------------+
| 170             | 170              | 170             |
+-----------------+------------------+-----------------+

Kiểm tra: 10+60+80+20 = 170 ✓ | 20+50+90+10 = 170 ✓ | 30+40+100+0 = 170 ✓

Mở rộng: Tổng nhiều cột động (dynamic columns)

Nếu số cột không cố định, dùng INFORMATION_SCHEMA.COLUMNS sinh SQL động:

SELECT GROUP_CONCAT(CONCAT('SUM(', COLUMN_NAME, ') AS sum_', COLUMN_NAME) SEPARATOR ', ')
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'DemoTable' AND TABLE_SCHEMA = DATABASE()
  AND DATA_TYPE IN ('int', 'bigint', 'decimal', 'float', 'double');

Kết quả chuỗi SQL có thể copy chạy hoặc dùng prepared statement.

Các hàm tổng hợp hữu ích khác

HàmChức năng
AVG()Trung bình
MIN() / MAX()Giá trị nhỏ nhất / lớn nhất
COUNT()Số hàng không NULL
STDDEV() / VARIANCE()Độ lệch chuẩn / Phương sai
GROUP_CONCAT()Ghép chuỗi giá trị