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

Hiển thị dữ liệu cột dưới dạng danh sách phân tách bằng dấu phẩy (GROUP_CONCAT)

Hàm GROUP_CONCAT() gom nối giá trị của một cột từ nhiều hàng thành một chuỗi duy nhất, mặc định phân tách bằng dấu phẩy. Rất hữu ích cho báo cáo, export CSV, hiển thị tag, danh sách ID...

Tạo bảng và dữ liệu

mysql> CREATE TABLE DemoTable (Value INT);
mysql> INSERT INTO DemoTable VALUES (10), (20), (30), (40), (50);

Dữ liệu

mysql> SELECT * FROM DemoTable;
+-------+
| Value |
+-------+
|    10 |
|    20 |
|    30 |
|    40 |
|    50 |
+-------+

Truy vấn GROUP_CONCAT cơ bản

mysql> SELECT GROUP_CONCAT(Value) FROM DemoTable;
+---------------------+
| GROUP_CONCAT(Value) |
+---------------------+
| 10,20,30,40,50      |
+---------------------+

Tùy chỉnh phân tách (SEPARATOR)

SELECT GROUP_CONCAT(Value SEPARATOR '; ') FROM DemoTable;

Kết quả: 10; 20; 30; 40; 50

Sắp xếp trước khi nối (ORDER BY trong GROUP_CONCAT)

SELECT GROUP_CONCAT(Value ORDER BY Value DESC SEPARATOR ',') FROM DemoTable;

Kết quả: 50,40,30,20,10

Loại bỏ trùng lặp (DISTINCT)

SELECT GROUP_CONCAT(DISTINCT Value) FROM DemoTable;

Giới hạn độ dài kết quả

Mặc định group_concat_max_len = 1024 bytes. Kết quả bị cắt nếu quá dài.

SET SESSION group_concat_max_len = 1000000; -- Tăng giới hạn cho session
SELECT GROUP_CONCAT(Value) FROM LargeTable;

Kết hợp với GROUP BY

SELECT Category, GROUP_CONCAT(ProductName) 
FROM Products GROUP BY Category;

Trả về danh sách sản phẩm cho mỗi danh mục.