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

Liệt kê tất cả các dòng theo nhóm với MySQL GROUP BY?

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 Name
  • GROUP_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;