Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Gộp các giá trị trùng lặp thành một hàng với GROUP_CONCAT trong MySQL

Gom nhóm giá trị trùng lặp thành chuỗi phân tách bằng dấu phân cách

Hàm GROUP_CONCAT() kết hợp với DISTINCT và SEPARATOR cho phép gộp nhiều hàng cùng nhóm thành một chuỗi, loại bỏ trùng lặp.

1. Tạo bảng và chèn dữ liệu

mysql> CREATE TABLE DemoTable (
    Id INT,
    Subject VARCHAR(40)
);
mysql> INSERT INTO DemoTable VALUES
    (100, 'MySQL'), (100, 'MongoDB'), (100, 'Java'), (100, 'MongoDB'),
    (101, 'MySQL'), (101, 'MySQL');

2. Xem dữ liệu

mysql> SELECT * FROM DemoTable;

Kết quả (6 hàng):

+------+---------+
| Id   | Subject |
+------+---------+
| 100  | MySQL   |
| 100  | MongoDB |
| 100  | Java    |
| 100  | MongoDB |
| 101  | MySQL   |
| 101  | MySQL   |
+------+---------+

3. Truy vấn: Gom nhóm theo Id, loại trùng, phân cách bằng dấu gạch ngang

mysql> SELECT Id, GROUP_CONCAT(DISTINCT Subject SEPARATOR '-') AS Subject
    FROM DemoTable
    GROUP BY Id;

4. Kết quả

+------+--------------------+
| Id   | Subject            |
+------+--------------------+
| 100  | Java-MongoDB-MySQL |
| 101  | MySQL              |
+------+--------------------+

Giải thích:

  • DISTINCT: Loại bỏ 'MongoDB' trùng lặp ở Id=100
  • SEPARATOR '-': Dùng dấu gạch ngang thay cho dấu phẩy mặc định
  • Thứ tự mặc định: Theo thứ tự xuất hiện trong nhóm (có thể thêm ORDER BY Subject trong GROUP_CONCAT)

Lưu ý: Độ dài kết quả mặc định giới hạn 1024 ký tự (biến group_concat_max_len). Tăng nếu cần: SET SESSION group_concat_max_len = 10000;