ใช้ฟังก์ชัน GROUP_CONCAT() ร่วมกับ Subquery ที่ GROUP BY เพื่อรวมค่าที่ไม่ซ้ำกันเป็นสตริงเดียว
ตัวอย่างการใช้งาน
1. สร้างตารางและแทรกข้อมูลซ้ำ
mysql> create table DemoTable (Subject varchar(10));
mysql> insert into DemoTable values('C'), ('C++'), ('C++'), ('MongoDB'), ('MySQL'), ('MongoDB'), ('MongoDB'), ('Java'), ('Java');
2. ข้อมูลทั้งหมด (มีซ้ำ)
+---------+ | Subject | +---------+ | C | | C++ | | C++ | | MongoDB | | MySQL | | MongoDB | | MongoDB | | Java | | Java | +---------+
3. รวมค่า DISTINCT ด้วย GROUP_CONCAT
mysql> select group_concat(tbl.sub)
-> from (select Subject sub from DemoTable group by Subject) tbl;
ผลลัพธ์
+--------------------------+ | group_concat(tbl.sub) | +--------------------------+ | C,C++,MongoDB,MySQL,Java | +--------------------------+
ตัวเลือกเพิ่มเติมของ GROUP_CONCAT
-- เปลี่ยนตัวคั่น (Default คือ ,) GROUP_CONCAT(DISTINCT Subject ORDER BY Subject SEPARATOR ' | ') -- จำกัดความยาว (Default 1024 bytes) SET SESSION group_concat_max_len = 10000;
กรณีใช้งานจริง
- สร้างรายการ Tag/Category เป็นสตริง
- Export ข้อมูลสำหรับรายงาน
- รวม Email สำหรับส่งเมล์จำนวนมาก