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

Gộp hàng trùng ID và lấy giá trị lớn nhất các cột khác trong MySQL

Dùng MAX() kết hợp GROUP BY Id. Tạo bảng:

mysql> CREATE TABLE DemoTable (
    Id INT,
    Value1 INT, Value2 INT, Value3 INT, Value4 INT
); Query OK, 0 rows affected (0.61 sec)

Chèn dữ liệu (cùng Id=100, các cột giá trị rải rác, có NULL):

mysql> INSERT INTO DemoTable(Id,Value4) VALUES(100,30);                    Query OK, 1 row affected (0.14 sec)
mysql> INSERT INTO DemoTable(Id,Value1,Value2,Value3) VALUES(100,20,60,40); Query OK, 1 row affected (0.14 sec)
mysql> INSERT INTO DemoTable(Id,Value2,Value3,Value4) VALUES(100,90,100,110); Query OK, 1 row affected (0.10 sec)

Hiển thị dữ liệu (3 hàng Id=100):

mysql> SELECT * FROM DemoTable;

Kết quả:

+------+--------+--------+--------+--------+
| Id   | Value1 | Value2 | Value3 | Value4 |
+------+--------+--------+--------+--------+
| 100  | NULL   | NULL   | NULL   | 30     |
| 100  | 20     | 60     | 40     | NULL   |
| 100  | NULL   | 90     | 100    | 110    |
+------+--------+--------+--------+--------+
3 rows in set (0.00 sec)

Gộp hàng, lấy MAX từng cột:

mysql> SELECT Id, 
    MAX(Value1) AS Value1, MAX(Value2) AS Value2, 
    MAX(Value3) AS Value3, MAX(Value4) AS Value4 
FROM DemoTable GROUP BY Id;

Kết quả (một hàng, giá trị lớn nhất từng cột):

+------+--------+--------+--------+--------+
| Id   | Value1 | Value2 | Value3 | Value4 |
+------+--------+--------+--------+--------+
| 100  | 20     | 90     | 100    | 110    |
+------+--------+--------+--------+--------+
1 row in set (0.00 sec)

Lưu ý: MAX() bỏ qua NULL. Phù hợp để "merge" dữ liệu thưa (sparse data).