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

MySQL: GROUP_CONCAT - Gom hàng distinct thành cột phân cách dấu phẩy

Hàm GROUP_CONCAT() gộp nhiều giá trị thành một chuỗi phân cách bởi dấu phẩy (hoặc ký tự tùy chọn), thường dùng với GROUP BY.

Cú pháp

SELECT cot1, cot2, cot3, GROUP_CONCAT(cot4) AS ten_alias
FROM ten_bang
GROUP BY cot3, cot1, cot2;

Ví dụ minh họa

Tạo bảng:

mysql> CREATE TABLE DanhSachPhanCachDauPhay (
    -> Id INT NOT NULL AUTO_INCREMENT,
    -> Ten VARCHAR(10),
    -> NhomId INT,
    -> TenCongTy VARCHAR(15),
    -> RefId INT,
    -> PRIMARY KEY(Id)
    -> );

Chèn dữ liệu (Larry thuộc Google có 3 RefId):

mysql> INSERT INTO DanhSachPhanCachDauPhay(Ten, NhomId, TenCongTy, RefId) VALUES
    -> ('Larry', 5, 'Google', 162),
    -> ('Larry', 5, 'Google', 5),
    -> ('Larry', 5, 'Google', 4),
    -> ('Sam', 6, 'Amazon', 3);

Dữ liệu gốc:

+----+-------+---------+-------------+-------+
| Id | Ten   | NhomId  | TenCongTy   | RefId |
+----+-------+---------+-------------+-------+
| 1  | Larry | 5       | Google      | 162   |
| 2  | Larry | 5       | Google      | 5     |
| 3  | Larry | 5       | Google      | 4     |
| 4  | Sam   | 6       | Amazon      | 3     |
+----+-------+---------+-------------+-------+

Gom RefId thành chuỗi phân cách phẩy

mysql> SELECT Ten, NhomId, TenCongTy, GROUP_CONCAT(RefId) AS DanhSachRefId
    -> FROM DanhSachPhanCachDauPhay
    -> GROUP BY TenCongTy, Ten, NhomId;

Kết quả:

+-------+---------+-------------+---------------+
| Ten   | NhomId  | TenCongTy   | DanhSachRefId |
+-------+---------+-------------+---------------+
| Sam   | 6       | Amazon      | 3             |
| Larry | 5       | Google      | 162,5,4       |
+-------+---------+-------------+---------------+

Tùy chọn phân cách

GROUP_CONCAT(RefId SEPARATOR '; ')  -- dùng dấu chấm phẩy
GROUP_CONCAT(DISTINCT RefId)        -- loại trùng lặp
GROUP_CONCAT(RefId ORDER BY RefId)  -- sắp xếp trước khi gom

Lưu ý: Độ dài mặc định của GROUP_CONCAT là 1024 bytes. Tăng bằng: SET SESSION group_concat_max_len = 1000000;