ภาพรวม
ฟังก์ชัน GROUP_CONCAT() ใช้รวมค่าจากหลายแถว (Rows) ให้กลายเป็นสตริงเดียว คั่นด้วยเครื่องหมายจุลภาค (หรือตัวคั่นที่กำหนด) มักใช้ร่วมกับ GROUP BY
ไวยากรณ์พื้นฐาน
GROUP_CONCAT([DISTINCT] expr [ORDER BY expr] [SEPARATOR str])
ตัวอย่างการใช้งาน
1. สร้างตารางและเพิ่มข้อมูล
CREATE TABLE DemoTable (CountryName VARCHAR(100));
INSERT INTO DemoTable VALUES ('US');
INSERT INTO DemoTable VALUES ('AUS');
INSERT INTO DemoTable VALUES ('UK');
2. ใช้ GROUP_CONCAT แบบง่าย
SELECT GROUP_CONCAT(CountryName) FROM DemoTable;
-- ผลลัพธ์: US,AUS,UK
3. ใช้กับ ORDER BY และ SEPARATOR
SELECT GROUP_CONCAT(CountryName ORDER BY CountryName SEPARATOR ' | ')
FROM DemoTable;
-- ผลลัพธ์: AUS | UK | US
4. ใช้ร่วมกับ GROUP BY (จัดกลุ่ม)
-- สมมติมีคอลัมน์ Region
SELECT Region, GROUP_CONCAT(CountryName ORDER BY CountryName)
FROM DemoTable
GROUP BY Region;
ตัวอย่างขั้นสูง: ใช้ใน Stored Procedure
DELIMITER //
CREATE PROCEDURE searchDemo(
IN stringValue VARCHAR(255),
OUT output TEXT
)
BEGIN
SELECT GROUP_CONCAT(DISTINCT CountryName ORDER BY CountryName)
INTO output
FROM DemoTable
WHERE CountryName LIKE stringValue;
END //
DELIMITER ;
-- เรียกใช้
CALL searchDemo('U%', @output);
SELECT @output;
-- ผลลัพธ์: UK,US
ตัวเลือกสำคัญ
| ตัวเลือก | คำอธิบาย |
|---|---|
| DISTINCT | กำจัดค่าซ้ำ |
| ORDER BY | เรียงลำดับก่อนรวม |
| SEPARATOR | กำหนดตัวคั่น (Default = ',') |
ข้อจำกัดและการตั้งค่า
- ความยาวสูงสุดควบคุมโดย
group_concat_max_len(Default = 1024 bytes) - เพิ่มค่าได้ด้วย:
SET SESSION group_concat_max_len = 1000000; - คืนค่า
NULLหากไม่มีแถวที่ตรงเงื่อนไข
กรณีใช้งานจริง
- สร้างรายการ Tag, Category แบบคั่นด้วยจุลภาค
- รวม Email/Phone ของลูกค้าในกลุ่มเดียวกัน
- สร้าง CSV string จากผล Query
- แสดงรายการสินค้าใน Order เดียว