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

ใช้ GROUP_CONCAT() รวมคอลัมน์เป็นรายการใน MySQL


ฟังก์ชัน 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 จากฐานข้อมูล
  • แสดงรายการสินค้าในออเดอร์เดียวกัน