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

วิธีแสดงรายการแถวทั้งหมดตามกลุ่มด้วย MySQL GROUP BY

การใช้ 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;