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

MySQL: รวมค่าซ้ำด้วย GROUP_CONCAT คั่นขีดกลาง

การรวมค่าที่ซ้ำกันในคอลัมน์หนึ่ง โดยรวมคอลัมน์อีกคอลัมน์คั่นด้วยขีดกลาง

ใช้ GROUP_CONCAT() ร่วมกับ GROUP BY เพื่อรวมแถวที่มีค่า Title ซ้ำกัน ให้กลายเป็นแถวเดียว โดยรวม Name คั่นด้วย ---- (4 ขีดกลาง)

สร้างตารางและข้อมูล

mysql> create table DemoTable1386 (
    -> Title varchar(255),
    -> Name varchar(60)
    -> );
Query OK, 0 rows affected (0.67 sec)

mysql> insert into DemoTable1386 values('Introduction to MySQL', 'Paul DuBois');
mysql> insert into DemoTable1386 values('Java in Depth', 'Khalid Mughal');
mysql> insert into DemoTable1386 values('Introduction to MySQL', 'Russell Dyer');
mysql> insert into DemoTable1386 values('Java in Depth', 'Joshua Bloch');

ข้อมูลก่อนรวม

+-----------------------+---------------+
| Title                 | Name          |
+-----------------------+---------------+
| Introduction to MySQL | Paul DuBois   |
| Java in Depth         | Khalid Mughal |
| Introduction to MySQL | Russell Dyer  |
| Java in Depth         | Joshua Bloch  |
+-----------------------+---------------+

คำสั่ง GROUP BY + GROUP_CONCAT

mysql> select Title, group_concat(Name separator '----') 
    -> from DemoTable1386 
    -> group by Title;

ผลลัพธ์

+-----------------------+-------------------------------------+
| Title                 | group_concat(Name separator '----') |
+-----------------------+-------------------------------------+
| Introduction to MySQL | Paul DuBois----Russell Dyer         |
| Java in Depth         | Khalid Mughal----Joshua Bloch       |
+-----------------------+-------------------------------------+

ตัวเลือก GROUP_CONCAT ที่ใช้

  • SEPARATOR '----' — ใช้สตริง '----' คั่นแทนคอมมา (default)
  • GROUP BY Title — จัดกลุ่มตาม Title

ตัวเลือกเพิ่มเติมที่มีประโยชน์

GROUP_CONCAT(
  DISTINCT Name              -- ลบชื่อซ้ำ
  ORDER BY Name ASC          -- เรียงชื่อก่อนรวม
  SEPARATOR ' | '            -- separator อื่น
)

ข้อจำกัด group_concat_max_len

ค่าเริ่มต้น 1024 ตัวอักษร หากข้อมูลรวมยาวเกิน จะถูกตัด ตั้งค่า:

SET SESSION group_concat_max_len = 1000000;

กรณีใช้งานจริง: สร้างรายชื่อผู้เขียนต่อหนังสือ, รวมแท็กของบทความ, รวมอีเมลของสมาชิกในกลุ่ม ฯลฯ