Hàm GROUP_CONCAT() trong MySQL cho phép gộp nhiều giá trị của một cột thành một chuỗi duy nhất, phân cách bởi ký tự tuỳ chọn (mặc định là dấu phẩy). Đây là công cụ hữu ích khi cần hiển thị dữ liệu dạng danh sách hoặc xuất báo cáo.
Cú pháp
SELECT cot_nhom, GROUP_CONCAT(cot_ghep [SEPARATOR 'ky_tu_phan_cach']) FROM ten_bang GROUP BY cot_nhom;
Ví dụ minh họa
Tạo bảng lưu tên khách hàng theo ClientId:
CREATE TABLE DemoTable (
ClientId INT,
ClientName VARCHAR(20)
);
Chèn dữ liệu (cùng ClientId = 100):
INSERT INTO DemoTable VALUES (100, 'Chris'); INSERT INTO DemoTable VALUES (100, 'Robert'); INSERT INTO DemoTable VALUES (100, 'Adam'); INSERT INTO DemoTable VALUES (100, 'David');
Sử dụng GROUP_CONCAT để gộp tên:
SELECT ClientId, GROUP_CONCAT(ClientName SEPARATOR ',') AS DanhSachTen FROM DemoTable GROUP BY ClientId;
Kết quả
| ClientId | DanhSachTen |
|---|---|
| 100 | Chris,Robert,Adam,David |
Các tùy chọn hữu ích
DISTINCT: Loại bỏ giá trị trùng lặp trước khi gộp:GROUP_CONCAT(DISTINCT ClientName)ORDER BY: Sắp xếp trước khi gộp:GROUP_CONCAT(ClientName ORDER BY ClientName)SEPARATOR: Thay đổi ký tự phân cách (mặc định là ','):SEPARATOR '; '
Lưu ý: Độ dài kết quả mặc định bị giới hạn bởi biến hệ thống group_concat_max_len (thường là 1024 byte). Có thể tăng giá trị này bằng SET SESSION group_concat_max_len = 1000000; nếu cần gộp nhiều dữ liệu.