Giới thiệu
Để liệt kê tất cả các dòng theo nhóm trong MySQL, bạn có thể sử dụng hàm GROUP_CONCAT(). Hàm này cho phép nối chuỗi các giá trị từ nhiều dòng thành một chuỗi duy nhất, được phân tách bởi ký tự tùy chọn.
Tạo bảng và chèn dữ liệu mẫu
Trước tiên, hãy tạo một bảng demo:
mysql> CREATE TABLE DemoTable (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
Name VARCHAR(20),
Value VARCHAR(100)
);
Chèn một số bản ghi vào bảng:
mysql> INSERT INTO DemoTable(Name, Value) VALUES('John', 'John');
mysql> INSERT INTO DemoTable(Name, Value) VALUES('Carol', 'Carol');
mysql> INSERT INTO DemoTable(Name, Value) VALUES('John', 'Works');
mysql> INSERT INTO DemoTable(Name, Value) VALUES('Carol', 'Works');
mysql> INSERT INTO DemoTable(Name, Value) VALUES('John', 'At');
mysql> INSERT INTO DemoTable(Name, Value) VALUES('Carol', 'At');
mysql> INSERT INTO DemoTable(Name, Value) VALUES('John', 'Amazon');
mysql> INSERT INTO DemoTable(Name, Value) VALUES('Carol', 'Google');
Xem dữ liệu gốc
mysql> SELECT * FROM DemoTable;
Kết quả:
+----+-------+--------+ | Id | Name | Value | +----+-------+--------+ | 1 | John | John | | 2 | Carol | Carol | | 3 | John | Works | | 4 | Carol | Works | | 5 | John | At | | 6 | Carol | At | | 7 | John | Amazon | | 8 | Carol | Google | +----+-------+--------+
Truy vấn nhóm với GROUP_CONCAT
Sử dụng GROUP_CONCAT() để gộp các giá trị theo nhóm:
mysql> SELECT Name, GROUP_CONCAT(Value SEPARATOR ' ') AS Complete_Status
-> FROM DemoTable GROUP BY Name;
Kết quả:
+-------+-----------------------+ | Name | Complete_Status | +-------+-----------------------+ | Carol | Carol Works At Google | | John | John Works At Amazon | +-------+-----------------------+
Giải thích
GROUP BY Name: Nhóm các dòng theo cột NameGROUP_CONCAT(Value SEPARATOR ' '): Nối các giá trị Value trong cùng nhóm, phân tách bằng dấu cách- Có thể thay đổi separator:
SEPARATOR ',',SEPARATOR '; ', v.v.
Lưu ý quan trọng
Mặc định, GROUP_CONCAT() có giới hạn độ dài 1024 ký tự. Để tăng giới hạn này:
SET SESSION group_concat_max_len = 1000000;