Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

รวมค่าจากหลายแถวเป็นสตริงเดียวด้วย GROUP_CONCAT() ใน MySQL

ใช้ 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 ตัวอักษร อาจต้องเพิ่มหากข้อมูลเยอะ