เมื่อต้องการรวมข้อมูลจากหลายแถวและหลายคอลัมน์ให้กลายเป็นสตริงเดียวใน 1 แถว ใช้ GROUP_CONCAT() ร่วมกับ CONCAT() ซึ่งเป็นเทคนิค Pivot/String Aggregation ที่นิยมใน MySQL
ตัวอย่างการใช้งาน
สร้างตารางลูกค้า:
mysql> CREATE TABLE DemoTable1463 (
-> ClientId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> ClientName VARCHAR(20),
-> ClientAge INT
-> );
เพิ่มข้อมูล (มี NULL ใน Age):
mysql> INSERT INTO DemoTable1463 (ClientName, ClientAge) VALUES ('Adam Smith', 34);
mysql> INSERT INTO DemoTable1463 (ClientName, ClientAge) VALUES ('John Doe', 29);
mysql> INSERT INTO DemoTable1463 (ClientName, ClientAge) VALUES ('David Miller', NULL);
mysql> INSERT INTO DemoTable1463 (ClientName, ClientAge) VALUES ('John Smith', 32);
ดูข้อมูล:
mysql> SELECT * FROM DemoTable1463; +----------+--------------+-----------+ | ClientId | ClientName | ClientAge | +----------+--------------+-----------+ | 1 | Adam Smith | 34 | | 2 | John Doe | 29 | | 3 | David Miller | NULL | | 4 | John Smith | 32 | +----------+--------------+-----------+
ต่อคอลัมน์ Id:Name:Age ทุกแถว คั่นด้วย Comma:
mysql> SELECT GROUP_CONCAT(CONCAT(ClientId, ':', ClientName, ':', IFNULL(ClientAge, '')))
-> FROM DemoTable1463;
ผลลัพธ์ (1 แถว 1 คอลัมน์):
+------------------------------------------------------------------------+ | GROUP_CONCAT(CONCAT(ClientId, ':', ClientName, ':', IFNULL(ClientAge, ''))) | +------------------------------------------------------------------------+ | 1:Adam Smith:34,2:John Doe:29,3:David Miller:,4:John Smith:32 | +------------------------------------------------------------------------+
ฟังก์ชันที่ใช้
| ฟังก์ชัน | บทบาท |
|---|---|
| CONCAT(str1, str2, ...) | ต่อคอลัมน์ในแต่ละแถว (Id:Name:Age) |
| IFNULL(expr, '') | แปลง NULL เป็น Empty String ป้องกัน CONCAT คืน NULL |
| GROUP_CONCAT(expr) | รวมสตริงจากทุกแถว คั่นด้วย Comma (Default) |