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

Gộp các bản ghi có ID tương tự thành một hàng, ngăn cách bằng ký tự đặc biệt trong MySQL

Giới thiệu

Khi cần gom nhóm nhiều dòng dữ liệu thành một dòng, với các giá trị được nối lại bằng một ký tự phân cách, MySQL cung cấp hàm GROUP_CONCAT() kết hợp với CONCAT_WS() (Concatenate With Separator).

Ví dụ minh họa

Bước 1: Tạo bảng và chèn dữ liệu

CREATE TABLE DemoTable2016 (
    UserId INT,
    UserName VARCHAR(20)
);
INSERT INTO DemoTable2016 VALUES (1, 'Chris');
INSERT INTO DemoTable2016 VALUES (2, 'Bob');
INSERT INTO DemoTable2016 VALUES (1, 'David');
INSERT INTO DemoTable2016 VALUES (2, 'Carol');
INSERT INTO DemoTable2016 VALUES (1, 'Sam');

Bước 2: Xem dữ liệu gốc

SELECT * FROM DemoTable2016;
+--------+----------+
| UserId | UserName |
+--------+----------+
| 1      | Chris    |
| 2      | Bob      |
| 1      | David    |
| 2      | Carol    |
| 1      | Sam      |
+--------+----------+

Bước 3: Gộp nhóm theo UserId, nối UserName và UserId bằng dấu '-', các nhóm ngăn cách bằng dấu ','

SELECT GROUP_CONCAT(CONCAT_WS('-', UserName, UserId))
FROM DemoTable2016
GROUP BY UserId;

Kết quả:

+----------------------------------------------+
| group_concat(concat_ws('-',UserName,UserId)) |
+----------------------------------------------+
| Chris-1,David-1,Sam-1                        |
| Bob-2,Carol-2                                |
+----------------------------------------------+

Giải thích:

  • CONCAT_WS('-', UserName, UserId): Nối UserName và UserId với dấu '-' (WS = With Separator).
  • GROUP_CONCAT(...): Gom các chuỗi kết quả của mỗi nhóm thành một chuỗi, mặc định ngăn cách bằng dấu ','.
  • Bạn có thể thay đổi dấu phân cách của GROUP_CONCAT bằng SEPARATOR '|'.