Hàm GROUP_CONCAT() gom nối giá trị của một cột từ nhiều hàng thành một chuỗi duy nhất, mặc định phân tách bằng dấu phẩy. Rất hữu ích cho báo cáo, export CSV, hiển thị tag, danh sách ID...
Tạo bảng và dữ liệu
mysql> CREATE TABLE DemoTable (Value INT);
mysql> INSERT INTO DemoTable VALUES (10), (20), (30), (40), (50);
Dữ liệu
mysql> SELECT * FROM DemoTable;
+-------+
| Value |
+-------+
| 10 |
| 20 |
| 30 |
| 40 |
| 50 |
+-------+
Truy vấn GROUP_CONCAT cơ bản
mysql> SELECT GROUP_CONCAT(Value) FROM DemoTable;
+---------------------+
| GROUP_CONCAT(Value) |
+---------------------+
| 10,20,30,40,50 |
+---------------------+
Tùy chỉnh phân tách (SEPARATOR)
SELECT GROUP_CONCAT(Value SEPARATOR '; ') FROM DemoTable;
Kết quả: 10; 20; 30; 40; 50
Sắp xếp trước khi nối (ORDER BY trong GROUP_CONCAT)
SELECT GROUP_CONCAT(Value ORDER BY Value DESC SEPARATOR ',') FROM DemoTable;
Kết quả: 50,40,30,20,10
Loại bỏ trùng lặp (DISTINCT)
SELECT GROUP_CONCAT(DISTINCT Value) FROM DemoTable;
Giới hạn độ dài kết quả
Mặc định group_concat_max_len = 1024 bytes. Kết quả bị cắt nếu quá dài.
SET SESSION group_concat_max_len = 1000000; -- Tăng giới hạn cho session
SELECT GROUP_CONCAT(Value) FROM LargeTable;
Kết hợp với GROUP BY
SELECT Category, GROUP_CONCAT(ProductName)
FROM Products GROUP BY Category;
Trả về danh sách sản phẩm cho mỗi danh mục.