Giải pháp: GROUP_CONCAT()
Hàm tổng hợp GROUP_CONCAT() nối các giá trị trong nhóm thành chuỗi phân cách.
Ví dụ minh họa
Tạo bảng điểm thi
mysql> CREATE TABLE DemoTable (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
Name VARCHAR(30),
Marks INT
);
mysql> INSERT INTO DemoTable(Name, Marks) VALUES('John', 67);
mysql> INSERT INTO DemoTable(Name, Marks) VALUES('Carol', 69);
mysql> INSERT INTO DemoTable(Name, Marks) VALUES('Sam', 69);
mysql> INSERT INTO DemoTable(Name, Marks) VALUES('David', 78);
mysql> INSERT INTO DemoTable(Name, Marks) VALUES('Chris', 69);
mysql> INSERT INTO DemoTable(Name, Marks) VALUES('Bob', 67);
Dữ liệu gốc
+----+-------+-------+ | Id | Name | Marks | +----+-------+-------+ | 1 | John | 67 | | 2 | Carol | 69 | | 3 | Sam | 69 | | 4 | David | 78 | | 5 | Chris | 69 | | 6 | Bob | 67 | +----+-------+-------+
Truy vấn GROUP_CONCAT
mysql> SELECT
-> Marks,
-> GROUP_CONCAT(Name ORDER BY Name ASC SEPARATOR ', ') AS Students
-> FROM DemoTable
-> GROUP BY Marks;
Kết quả
+-------+-----------------------------------------------------+ | Marks | Students | +-------+-----------------------------------------------------+ | 67 | Bob, John | | 69 | Carol, Chris, Sam | | 78 | David | +-------+-----------------------------------------------------+
Cú pháp đầy đủ
GROUP_CONCAT(
[DISTINCT] expr
[ORDER BY {unsigned_integer | col_name | expr} [ASC | DESC] [, ...]]
[SEPARATOR str_val]
)
Các tùy chọn
| Tùy chọn | Mặc định | Ví dụ |
|---|---|---|
DISTINCT | Không | Loại bỏ trùng lặp |
ORDER BY | Không sắp xếp | ORDER BY Name ASC |
SEPARATOR | ',' | SEPARATOR '; ', SEPARATOR ' | ' |