คำอธิบาย
ใช้ GROUP_CONCAT() ร่วมกับ DISTINCT เพื่อรวมค่าที่ซ้ำกันในกลุ่มเดียวกัน ให้อยู่ในแถวเดียว คั่นด้วยตัวคั่นที่กำหนด (เช่น Hyphen -)
ขั้นตอนการสร้างตารางและข้อมูลตัวอย่าง
mysql> create table DemoTable (
Id int,
Subject varchar(40) );
Query OK, 0 rows affected (0.56 sec)
การเพิ่มข้อมูล
mysql> insert into DemoTable values(100, 'MySQL'); Query OK, 1 row affected (0.19 sec) mysql> insert into DemoTable values(100, 'MongoDB'); Query OK, 1 row affected (0.20 sec) mysql> insert into DemoTable values(100, 'Java'); Query OK, 1 row affected (0.14 sec) mysql> insert into DemoTable values(100, 'MongoDB'); Query OK, 1 row affected (0.11 sec) mysql> insert into DemoTable values(101, 'MySQL'); Query OK, 1 row affected (0.16 sec) mysql> insert into DemoTable values(101, 'MySQL'); Query OK, 1 row affected (0.10 sec)
แสดงข้อมูลทั้งหมด
mysql> select * from DemoTable;
ผลลัพธ์:
+------+---------+ | Id | Subject | +------+---------+ | 100 | MySQL | | 100 | MongoDB | | 100 | Java | | 100 | MongoDB | | 101 | MySQL | | 101 | MySQL | +------+---------+ 6 rows in set (0.00 sec)
คิวรี่รวมค่าที่ไม่ซ้ำ คั่นด้วย Hyphen
mysql> select Id, group_concat(distinct Subject separator '-') as Subject from DemoTable group by Id;
ผลลัพธ์
+------+--------------------+ | Id | Subject | +------+--------------------+ | 100 | Java-MongoDB-MySQL | | 101 | MySQL | +------+--------------------+ 2 rows in set (0.04 sec)
คำอธิบาย
- DISTINCT: ลบค่าซ้ำก่อนรวม (MongoDB ปรากฏ 2 ครั้ง แต่แสดงครั้งเดียว)
- SEPARATOR '-': กำหนดตัวคั่น (Default คือ จุลภาค ,)
- GROUP BY Id: จัดกลุ่มตาม Id
ตัวเลือกเพิ่มเติม
- ORDER BY ภายใน GROUP_CONCAT:
GROUP_CONCAT(DISTINCT Subject ORDER BY Subject SEPARATOR '-') - ควบคุมความยาวสูงสุดด้วย
group_concat_max_len(Default 1024 ตัวอักษร)