Gom nhóm giá trị trùng lặp thành chuỗi phân tách bằng dấu phân cách
Hàm GROUP_CONCAT() kết hợp với DISTINCT và SEPARATOR cho phép gộp nhiều hàng cùng nhóm thành một chuỗi, loại bỏ trùng lặp.
1. Tạo bảng và chèn dữ liệu
mysql> CREATE TABLE DemoTable (
Id INT,
Subject VARCHAR(40)
);
mysql> INSERT INTO DemoTable VALUES
(100, 'MySQL'), (100, 'MongoDB'), (100, 'Java'), (100, 'MongoDB'),
(101, 'MySQL'), (101, 'MySQL');
2. Xem dữ liệu
mysql> SELECT * FROM DemoTable;
Kết quả (6 hàng):
+------+---------+ | Id | Subject | +------+---------+ | 100 | MySQL | | 100 | MongoDB | | 100 | Java | | 100 | MongoDB | | 101 | MySQL | | 101 | MySQL | +------+---------+
3. Truy vấn: Gom nhóm theo Id, loại trùng, phân cách bằng dấu gạch ngang
mysql> SELECT Id, GROUP_CONCAT(DISTINCT Subject SEPARATOR '-') AS Subject
FROM DemoTable
GROUP BY Id;
4. Kết quả
+------+--------------------+ | Id | Subject | +------+--------------------+ | 100 | Java-MongoDB-MySQL | | 101 | MySQL | +------+--------------------+
Giải thích:
DISTINCT: Loại bỏ 'MongoDB' trùng lặp ở Id=100SEPARATOR '-': Dùng dấu gạch ngang thay cho dấu phẩy mặc định- Thứ tự mặc định: Theo thứ tự xuất hiện trong nhóm (có thể thêm
ORDER BY Subjecttrong GROUP_CONCAT)
Lưu ý: Độ dài kết quả mặc định giới hạn 1024 ký tự (biến group_concat_max_len). Tăng nếu cần: SET SESSION group_concat_max_len = 10000;