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

การหาข้อมูลซ้ำและแสดงในบรรทัดเดียวด้วย GROUP_CONCAT ใน MySQL

ใช้ GROUP_CONCAT() ร่วมกับ GROUP BY เพื่อรวมข้อมูลซ้ำแสดงในบรรทัดเดียว

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

mysql> create table DemoTable ( 
    StudentFavouriteSubject varchar(40), 
    StudentName varchar(40) ) ; 
Query OK, 0 rows affected (0.75 sec)

เพิ่มข้อมูลตัวอย่าง

mysql> insert into DemoTable values('MySQL','Chris'); Query OK, 1 row affected (0.22 sec)
mysql> insert into DemoTable values('MongoDB','Bob'); Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable values('MySQL','Sam'); Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable values('Java','Mike'); Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable values('C','Carol'); Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable values('MongoDB','John'); Query OK, 1 row affected (0.18 sec)

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

mysql> select *from DemoTable;
+-------------------------+-------------+
| StudentFavouriteSubject | StudentName |
+-------------------------+-------------+
| MySQL                   | Chris       |
| MongoDB                 | Bob         |
| MySQL                   | Sam         |
| Java                    | Mike        |
| C                       | Carol       |
| MongoDB                 | John        |
+-------------------------+-------------+
6 rows in set (0.00 sec)

คิวรี่หาข้อมูลซ้ำและรวมในบรรทัดเดียว

mysql> select group_concat(StudentName),StudentFavouriteSubject from DemoTable group by StudentFavouriteSubject;

ผลลัพธ์:

+---------------------------+-------------------------+
| group_concat(StudentName) | StudentFavouriteSubject |
+---------------------------+-------------------------+
| Carol                     | C                       |
| Mike                      | Java                    |
| Bob,John                  | MongoDB                 |
| Chris,Sam                 | MySQL                   |
+---------------------------+-------------------------+
4 rows in set (0.00 sec)

การปรับแต่ง GROUP_CONCAT

  • ตัวคั่น: GROUP_CONCAT(StudentName SEPARATOR '; ')
  • เรียงลำดับ: GROUP_CONCAT(StudentName ORDER BY StudentName)
  • ไม่ซ้ำ: GROUP_CONCAT(DISTINCT StudentName)
  • จำกัดจำนวน: GROUP_CONCAT(StudentName LIMIT 3) (MySQL 8.0+)

เพิ่มเงื่อนไข HAVING เพื่อหาเฉพาะที่ซ้ำจริง

SELECT GROUP_CONCAT(StudentName), StudentFavouriteSubject, COUNT(*) as cnt
FROM DemoTable 
GROUP BY StudentFavouriteSubject
HAVING cnt > 1;

ข้อจำกัด

ค่าเริ่มต้น group_concat_max_len = 1024 ตัวอักษร เพิ่มได้ด้วย SET SESSION group_concat_max_len = 10000;