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

Có thể GROUP BY một cột và SELECT tất cả dữ liệu trong MySQL?

Khi dùng GROUP BY một cột, các cột khác trong SELECT phải là hàm tổng hợp (SUM, MAX, v.v.) hoặc nằm trong GROUP BY. Để "giữ lại" tất cả giá trị của cột khác, dùng GROUP_CONCAT() nối chuỗi.

Ví dụ minh họa

Tạo bảng:

CREATE TABLE groupByOneSelectAll (
    StudentDetails VARCHAR(100),
    StudentName VARCHAR(100)
);

INSERT INTO groupByOneSelectAll VALUES
('StudentFirstName', 'John'),
('StudentFirstName', 'Chris'),
('StudentFirstName', 'Robert'),
('StudentFirstName', 'Bob'),
('StudentFirstName', 'David');

Dữ liệu (5 hàng, cùng StudentDetails):

+------------------+-------------+
| StudentDetails   | StudentName |
+------------------+-------------+
| StudentFirstName | John        |
| StudentFirstName | Chris       |
| StudentFirstName | Robert      |
| StudentFirstName | Bob         |
| StudentFirstName | David       |
+------------------+-------------+

Gom nhóm StudentDetails, nối tất cả StudentName:

SELECT StudentDetails, GROUP_CONCAT(StudentName)
FROM groupByOneSelectAll
GROUP BY StudentDetails;

Kết quả (1 hàng):

+------------------+-----------------------------+
| StudentDetails   | GROUP_CONCAT(StudentName)   |
+------------------+-----------------------------+
| StudentFirstName | John,Chris,Robert,Bob,David |
+------------------+-----------------------------+

Lưu ý:

  • Mặc định GROUP_CONCAT giới hạn 1024 ký tự. Tăng bằng: SET SESSION group_concat_max_len = 1000000;.
  • Sắp xếp trong chuỗi: GROUP_CONCAT(StudentName ORDER BY StudentName SEPARATOR '; ').
  • Nếu cần giữ cấu trúc dòng (không gộp chuỗi), hãy dùng window function ROW_NUMBER() hoặc JOIN lại bảng gốc.