การรวมค่าที่ซ้ำกันในคอลัมน์หนึ่ง โดยรวมคอลัมน์อีกคอลัมน์คั่นด้วยขีดกลาง
ใช้ GROUP_CONCAT() ร่วมกับ GROUP BY เพื่อรวมแถวที่มีค่า Title ซ้ำกัน ให้กลายเป็นแถวเดียว โดยรวม Name คั่นด้วย ---- (4 ขีดกลาง)
สร้างตารางและข้อมูล
mysql> create table DemoTable1386 (
-> Title varchar(255),
-> Name varchar(60)
-> );
Query OK, 0 rows affected (0.67 sec)
mysql> insert into DemoTable1386 values('Introduction to MySQL', 'Paul DuBois');
mysql> insert into DemoTable1386 values('Java in Depth', 'Khalid Mughal');
mysql> insert into DemoTable1386 values('Introduction to MySQL', 'Russell Dyer');
mysql> insert into DemoTable1386 values('Java in Depth', 'Joshua Bloch');
ข้อมูลก่อนรวม
+-----------------------+---------------+ | Title | Name | +-----------------------+---------------+ | Introduction to MySQL | Paul DuBois | | Java in Depth | Khalid Mughal | | Introduction to MySQL | Russell Dyer | | Java in Depth | Joshua Bloch | +-----------------------+---------------+
คำสั่ง GROUP BY + GROUP_CONCAT
mysql> select Title, group_concat(Name separator '----')
-> from DemoTable1386
-> group by Title;
ผลลัพธ์
+-----------------------+-------------------------------------+ | Title | group_concat(Name separator '----') | +-----------------------+-------------------------------------+ | Introduction to MySQL | Paul DuBois----Russell Dyer | | Java in Depth | Khalid Mughal----Joshua Bloch | +-----------------------+-------------------------------------+
ตัวเลือก GROUP_CONCAT ที่ใช้
SEPARATOR '----'— ใช้สตริง '----' คั่นแทนคอมมา (default)GROUP BY Title— จัดกลุ่มตาม Title
ตัวเลือกเพิ่มเติมที่มีประโยชน์
GROUP_CONCAT(
DISTINCT Name -- ลบชื่อซ้ำ
ORDER BY Name ASC -- เรียงชื่อก่อนรวม
SEPARATOR ' | ' -- separator อื่น
)
ข้อจำกัด group_concat_max_len
ค่าเริ่มต้น 1024 ตัวอักษร หากข้อมูลรวมยาวเกิน จะถูกตัด ตั้งค่า:
SET SESSION group_concat_max_len = 1000000;
กรณีใช้งานจริง: สร้างรายชื่อผู้เขียนต่อหนังสือ, รวมแท็กของบทความ, รวมอีเมลของสมาชิกในกลุ่ม ฯลฯ