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

GROUP_CONCAT DISTINCT ตาม ID ใน MySQL ด้วย Subquery

เมื่อต้องการ GROUP_CONCAT ค่าที่ไม่ซ้ำ (DISTINCT) จัดกลุ่มตาม ID ให้ใช้ Subquery กรอง DISTINCT ก่อน แล้วค่อย GROUP_CONCAT

ตัวอย่างการสร้างตาราง

mysql> create table DemoTable ( 
    Id int, 
    Name varchar(100) ); 
Query OK, 0 rows affected (0.64 sec)

เพิ่มข้อมูล (มี Id และ Name ซ้ำ)

mysql> insert into DemoTable values(100,'Chris'); 
Query OK, 1 row affected (0.44 sec)
mysql> insert into DemoTable values(200,'Robert'); 
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values(100,'Chris'); 
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values(300,'David'); 
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable values(400,'Mike'); 
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable values(400,'Mike'); 
Query OK, 1 row affected (0.10 sec)

แสดงข้อมูลทั้งหมด

mysql> select * from DemoTable;
+------+--------+
| Id   | Name   |
+------+--------+
| 100  | Chris  |
| 200  | Robert |
| 100  | Chris  |
| 300  | David  |
| 400  | Mike   |
| 400  | Mike   |
+------+--------+
6 rows in set (0.00 sec)

คำสั่ง GROUP_CONCAT DISTINCT โดยใช้ Subquery

mysql> select group_concat(Name) from ( 
    select distinct Id, Name from DemoTable 
) tbl;

ผลลัพธ์

+-------------------------+
| group_concat(Name)      |
+-------------------------+
| Chris,Robert,David,Mike |
+-------------------------+
1 row in set (0.00 sec)

คำอธิบาย: Subquery SELECT DISTINCT Id, Name FROM DemoTable กรองแถวซ้ำออกก่อน (Id+Name คู่เดียวกัน) แล้วค่อย GROUP_CONCAT(Name) รวมชื่อทั้งหมดเป็นสตริงเดียว

MySQL 8.0+ รองรับ: GROUP_CONCAT(DISTINCT Name ORDER BY Name) โดยตรง ไม่ต้อง Subquery (แต่ DISTINCT ใน GROUP_CONCAT ใช้กับคอลัมน์เดียว ไม่ใช่คู่ Id+Name)