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).