การใช้ GROUP_CONCAT() เพื่อรวมค่าตามกลุ่ม
เมื่อต้องการแสดงรายการแถวทั้งหมดที่จัดกลุ่มไว้ด้วยกัน สามารถใช้ฟังก์ชัน GROUP_CONCAT() ได้ ซึ่งจะรวมค่าจากหลายแถวให้กลายเป็นสตริงเดียว โดยคั่นด้วยตัวแบ่งที่ระบุ
ตัวอย่างการสร้างตารางและข้อมูลทดสอบ
mysql> CREATE TABLE DemoTable (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
Name VARCHAR(20),
Value VARCHAR(100)
);
เพิ่มข้อมูลตัวอย่าง:
INSERT INTO DemoTable (Name, Value) VALUES
('John', 'John'),
('Carol', 'Carol'),
('John', 'Works'),
('Carol', 'Works'),
('John', 'At'),
('Carol', 'At'),
('John', 'Amazon'),
('Carol', 'Google');
ข้อมูลในตารางก่อนจัดกลุ่ม
+----+-------+--------+ | Id | Name | Value | +----+-------+--------+ | 1 | John | John | | 2 | Carol | Carol | | 3 | John | Works | | 4 | Carol | Works | | 5 | John | At | | 6 | Carol | At | | 7 | John | Amazon | | 8 | Carol | Google | +----+-------+--------+
คำสั่ง SQL สำหรับจัดกลุ่มและรวมค่า
SELECT Name, GROUP_CONCAT(Value SEPARATOR ' ') AS Complete_Status FROM DemoTable GROUP BY Name;
ผลลัพธ์ที่ได้
+-------+-----------------------+ | Name | Complete_Status | +-------+-----------------------+ | Carol | Carol Works At Google | | John | John Works At Amazon | +-------+-----------------------+
คำอธิบาย: คำสั่งนี้จะจัดกลุ่มข้อมูลตามคอลัมน์ Name จากนั้นใช้ GROUP_CONCAT() รวมค่าในคอลัมน์ Value ของแต่ละกลุ่ม โดยคั่นด้วยช่องว่าง (space) ผลลัพธ์จะแสดงชื่อพร้อมกับค่าที่รวมไว้ด้วยกันแล้ว
หมายเหตุ: ความยาวสูงสุดของผลลัพธ์จาก GROUP_CONCAT() ควบคุมโดยตัวแปรระบบ group_concat_max_len (ค่าเริ่มต้น 1024 ไบต์) หากข้อมูลเยอะอาจต้องปรับค่านี้ด้วย SET SESSION group_concat_max_len = 10000;