Để gộp nhiều giá trị từ các hàng cùng nhóm thành một chuỗi, phân cách bằng dấu phẩy, MySQL cung cấp hàm tổng hợp GROUP_CONCAT().
Ví dụ minh họa
Tạo bảng sinh viên:
mysql> create table DemoTable (
StudentId int,
StudentFirstName varchar(100),
StudentLastName varchar(100)
);
Chèn dữ liệu (3 sinh viên cùng StudentId = 1000):
mysql> insert into DemoTable values(1000,'Adam','Smith'); mysql> insert into DemoTable values(1000,'John','Doe'); mysql> insert into DemoTable values(1000,'David','Miller');
Hiển thị dữ liệu gốc:
mysql> select * from DemoTable;
Kết quả:
+-----------+------------------+-----------------+ | StudentId | StudentFirstName | StudentLastName | +-----------+------------------+-----------------+ | 1000 | Adam | Smith | | 1000 | John | Doe | | 1000 | David | Miller | +-----------+------------------+-----------------+
Truy vấn GROUP_CONCAT theo StudentId
mysql> select StudentId,
group_concat(StudentFirstName),
group_concat(StudentLastName)
from DemoTable group by StudentId;
Kết quả:
+-----------+--------------------------------+-------------------------------+ | StudentId | group_concat(StudentFirstName) | group_concat(StudentLastName) | +-----------+--------------------------------+-------------------------------+ | 1000 | Adam,John,David | Smith,Doe,Miller | +-----------+--------------------------------+-------------------------------+
Giải thích:
GROUP BY StudentId: Nhóm 3 hàng thành 1 nhómGROUP_CONCAT(StudentFirstName): Nối tên đầu: "Adam,John,David"GROUP_CONCAT(StudentLastName): Nối tên cuối: "Smith,Doe,Miller"- Mặc định phân cách bằng dấu phẩy, có thể tùy chỉnh:
GROUP_CONCAT(col SEPARATOR '; ')
Lưu ý: Độ dài mặc định của GROUP_CONCAT là 1024 ký tự (biến group_concat_max_len). Với dữ liệu lớn, cần tăng giá trị này: SET SESSION group_concat_max_len = 1000000;