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

รวมผลลัพธ์ DISTINCT เป็นสตริงเดียวใน MySQL

ใช้ฟังก์ชัน 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 สำหรับส่งเมล์จำนวนมาก