Hàm GROUP_CONCAT() gộp nhiều giá trị thành một chuỗi phân cách bởi dấu phẩy (hoặc ký tự tùy chọn), thường dùng với GROUP BY.
Cú pháp
SELECT cot1, cot2, cot3, GROUP_CONCAT(cot4) AS ten_alias FROM ten_bang GROUP BY cot3, cot1, cot2;
Ví dụ minh họa
Tạo bảng:
mysql> CREATE TABLE DanhSachPhanCachDauPhay (
-> Id INT NOT NULL AUTO_INCREMENT,
-> Ten VARCHAR(10),
-> NhomId INT,
-> TenCongTy VARCHAR(15),
-> RefId INT,
-> PRIMARY KEY(Id)
-> );
Chèn dữ liệu (Larry thuộc Google có 3 RefId):
mysql> INSERT INTO DanhSachPhanCachDauPhay(Ten, NhomId, TenCongTy, RefId) VALUES
-> ('Larry', 5, 'Google', 162),
-> ('Larry', 5, 'Google', 5),
-> ('Larry', 5, 'Google', 4),
-> ('Sam', 6, 'Amazon', 3);
Dữ liệu gốc:
+----+-------+---------+-------------+-------+ | Id | Ten | NhomId | TenCongTy | RefId | +----+-------+---------+-------------+-------+ | 1 | Larry | 5 | Google | 162 | | 2 | Larry | 5 | Google | 5 | | 3 | Larry | 5 | Google | 4 | | 4 | Sam | 6 | Amazon | 3 | +----+-------+---------+-------------+-------+
Gom RefId thành chuỗi phân cách phẩy
mysql> SELECT Ten, NhomId, TenCongTy, GROUP_CONCAT(RefId) AS DanhSachRefId
-> FROM DanhSachPhanCachDauPhay
-> GROUP BY TenCongTy, Ten, NhomId;
Kết quả:
+-------+---------+-------------+---------------+ | Ten | NhomId | TenCongTy | DanhSachRefId | +-------+---------+-------------+---------------+ | Sam | 6 | Amazon | 3 | | Larry | 5 | Google | 162,5,4 | +-------+---------+-------------+---------------+
Tùy chọn phân cách
GROUP_CONCAT(RefId SEPARATOR '; ') -- dùng dấu chấm phẩy GROUP_CONCAT(DISTINCT RefId) -- loại trùng lặp GROUP_CONCAT(RefId ORDER BY RefId) -- sắp xếp trước khi gom
Lưu ý: Độ dài mặc định của GROUP_CONCAT là 1024 bytes. Tăng bằng: SET SESSION group_concat_max_len = 1000000;