Hàm GROUP_CONCAT() hỗ trợ mệnh đề ORDER BY bên trong để sắp xếp các giá trị trước khi gộp chuỗi.
Cú pháp
GROUP_CONCAT(cot [ORDER BY cot_sap_xep [ASC|DESC]] [SEPARATOR 'ky_tu'])
Ví dụ minh họa
Tạo bảng 3 học sinh cùng điểm 78:
CREATE TABLE DemoTable1588 (StudentId INT, StudentFirstName VARCHAR(20), StudentMarks INT); INSERT INTO DemoTable1588 VALUES (110, 'Bob', 78), (101, 'Sam', 78), (105, 'Mike', 78);
Gom tên theo StudentId tăng dần, phân cách bằng --:
SELECT GROUP_CONCAT(StudentFirstName ORDER BY StudentId SEPARATOR '--') FROM DemoTable1588 GROUP BY StudentMarks;
Kết quả
| GROUP_CONCAT(...) |
|---|
| Sam--Mike--Bob |
(Id 101=Sam, 105=Mike, 110=Bob → sắp xếp Id ASC: Sam, Mike, Bob)
Ứng dụng thực tế
- Danh sách tag/categories theo alphabet:
GROUP_CONCAT(tag ORDER BY tag) - Lịch sử hành động theo thời gian:
GROUP_CONCAT(action ORDER BY created_at) - Xuất CSV có thứ tự xác định.
Lưu ý
- Mặc định
SEPARATORlà dấu phẩy','. - Độ dài tối đa:
group_concat_max_len(default 1024). Tăng nếu cần:SET SESSION group_concat_max_len = 1000000; DISTINCTcó thể kết hợp:GROUP_CONCAT(DISTINCT name ORDER BY name).