ใช้ GROUP_CONCAT() ร่วม GROUP BY เพื่อรวมค่าจากหลายแถวกลายเป็นสตริงเดียวคั่นด้วยตัวคั่น
ตัวอย่าง
mysql> create table DemoTable (
StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
StudentName varchar(30),
StudentScore int
);
Query OK, 0 rows affected (0.51 sec)
mysql> insert into DemoTable(StudentName,StudentScore) values('Bob',80); Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable(StudentName,StudentScore) values('Bob',80); Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable(StudentName,StudentScore) values('Chris',90); Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable(StudentName,StudentScore) values('Chris',70); Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable(StudentName,StudentScore) values('Bob',50); Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable(StudentName,StudentScore) values('David',60); Query OK, 1 row affected (0.23 sec)
mysql> insert into DemoTable(StudentName,StudentScore) values('Chris',99); Query OK, 1 row affected (0.09 sec)
mysql> insert into DemoTable(StudentName,StudentScore) values('David',88); Query OK, 1 row affected (0.18 sec)
ข้อมูลดิบ
mysql> select * from DemoTable;
+-----------+-------------+--------------+ | StudentId | StudentName | StudentScore | +-----------+-------------+--------------+ | 1 | Bob | 80 | | 2 | Bob | 80 | | 3 | Chris | 90 | | 4 | Chris | 70 | | 5 | Bob | 50 | | 6 | David | 60 | | 7 | Chris | 99 | | 8 | David | 88 | +-----------+-------------+--------------+
รวมคะแนนตามชื่อ
mysql> select StudentName, group_concat(StudentScore separator ',') as Score from DemoTable group by StudentName;
+-------------+----------+ | StudentName | Score | +-------------+----------+ | Bob | 80,80,50 | | Chris | 90,70,99 | | David | 60,88 | +-------------+----------+
ค่าเริ่มต้นของ group_concat_max_len คือ 1024 ตัวอักษร อาจต้องเพิ่มหากข้อมูลเยอะ