Mục đích
Gom nhiều dòng thành 1 chuỗi, ngăn cách bởi delimiter tùy chọn.
Ví dụ cơ bản
Tạo bảng và dữ liệu:
CREATE TABLE DemoTable (CountryName VARCHAR(100));
INSERT INTO DemoTable VALUES ('US'), ('AUS'), ('UK');
Tạo Stored Procedure có tham số IN/OUT:
DELIMITER //
CREATE PROCEDURE searchDemo(IN stringValue VARCHAR(255), OUT output TEXT)
BEGIN
SELECT GROUP_CONCAT(DISTINCT CountryName ORDER BY CountryName)
INTO output
FROM DemoTable
WHERE CountryName LIKE stringValue;
END //
DELIMITER ;
Gọi procedure:
CALL searchDemo('U%', @output);
SELECT @output;
Kết quả:
+---------+
| @output |
+---------+
| UK,US |
+---------+
Các tùy chọn GROUP_CONCAT
GROUP_CONCAT(
[DISTINCT] bieu_thuc
[ORDER BY ...]
[SEPARATOR 'ky_tu_ngan_cach']
)
- DISTINCT: Loại bỏ trùng lặp.
- ORDER BY: Sắp xếp trước khi nối.
- SEPARATOR: Mặc định là dấu phẩy
','.
Lưu ý quan trọng
- Giới hạn độ dài: Mặc định 1024 bytes (
group_concat_max_lensystem variable). Cần tăng nếu dữ liệu lớn:SET SESSION group_concat_max_len = 1000000;. - NULL values: Bị bỏ qua tự động.
- NULL result: Nếu không có dòng nào, trả về NULL (không phải chuỗi rỗng).
Ứng dụng thực tế
- Tạo danh sách tag, category cho bài viết.
- Export CSV từ database.
- Build dynamic IN clause cho query khác.
- Reporting: gom email, phone numbers...