ฟังก์ชัน GROUP_CONCAT()
ฟังก์ชัน GROUP_CONCAT() ใน MySQL ใช้สำหรับรวมค่าจากหลายแถว (rows) ให้กลายเป็นสตริงเดียว โดยคั่นด้วยตัวคั่นที่กำหนด (Default คือ comma) เหมาะสำหรับการสร้างรายการหรือรายงาน
รูปแบบการใช้งาน
GROUP_CONCAT(column_name [SEPARATOR 'separator_string'])
ตัวอย่างการใช้งาน
1. สร้างตารางตัวอย่าง
mysql> CREATE TABLE DemoTable (
-> ClientId INT,
-> ClientName VARCHAR(20)
-> );
Query OK, 0 rows affected (0.88 sec)
2. เพิ่มข้อมูลทดสอบ
mysql> INSERT INTO DemoTable VALUES(100, 'Chris'); Query OK, 1 row affected (0.54 sec) mysql> INSERT INTO DemoTable VALUES(100, 'Robert'); Query OK, 1 row affected (0.14 sec) mysql> INSERT INTO DemoTable VALUES(100, 'Adam'); Query OK, 1 row affected (0.14 sec) mysql> INSERT INTO DemoTable VALUES(100, 'David'); Query OK, 1 row affected (0.13 sec)
3. แสดงข้อมูลก่อนจัดกลุ่ม
mysql> SELECT * FROM DemoTable;
ผลลัพธ์:
+----------+------------+ | ClientId | ClientName | +----------+------------+ | 100 | Chris | | 100 | Robert | | 100 | Adam | | 100 | David | +----------+------------+ 4 rows in set (0.00 sec)
4. ใช้ GROUP_CONCAT รวมชื่อตาม ClientId
mysql> SELECT ClientId, GROUP_CONCAT(ClientName SEPARATOR ',') FROM DemoTable GROUP BY ClientId;
ผลลัพธ์:
+----------+----------------------------------------+ | ClientId | group_concat(ClientName separator ',') | +----------+----------------------------------------+ | 100 | Chris,Robert,Adam,David | +----------+----------------------------------------+ 1 row in set (0.00 sec)
ตัวเลือกเพิ่มเติม
- DISTINCT: กรองค่าซ้ำออก
GROUP_CONCAT(DISTINCT ClientName) - ORDER BY: เรียงลำดับก่อนรวม
GROUP_CONCAT(ClientName ORDER BY ClientName) - SEPARATOR: เปลี่ยนตัวคั่น
GROUP_CONCAT(ClientName SEPARATOR ' | ') - LIMIT: จำกัดจำนวนรายการ (MySQL 8.0+)
GROUP_CONCAT(ClientName LIMIT 3)
ข้อจำกัด
ค่าความยาวสูงสุดเริ่มต้นคือ 1024 ตัวอักษร สามารถปรับได้ด้วยตัวแปรระบบ:
SET SESSION group_concat_max_len = 10000;
กรณีการใช้งานจริง
- สร้างรายการ Tag/Category ของบทความ
- รวม Email ของสมาชิกในกลุ่มเดียวกัน
- สร้าง CSV export จากฐานข้อมูล
- แสดงรายการสินค้าในออเดอร์เดียวกัน