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

Gọi hàm tổng hợp trong ORDER BY với GROUP_CONCAT trong MySQL

Hàm GROUP_CONCAT() hỗ trợ mệnh đề ORDER BY bên trong để sắp xếp các giá trị trước khi gộp chuỗi.

Cú pháp

GROUP_CONCAT(cot [ORDER BY cot_sap_xep [ASC|DESC]] [SEPARATOR 'ky_tu'])

Ví dụ minh họa

Tạo bảng 3 học sinh cùng điểm 78:

CREATE TABLE DemoTable1588 (StudentId INT, StudentFirstName VARCHAR(20), StudentMarks INT);
INSERT INTO DemoTable1588 VALUES (110, 'Bob', 78), (101, 'Sam', 78), (105, 'Mike', 78);

Gom tên theo StudentId tăng dần, phân cách bằng --:

SELECT GROUP_CONCAT(StudentFirstName ORDER BY StudentId SEPARATOR '--') 
FROM DemoTable1588 
GROUP BY StudentMarks;

Kết quả

GROUP_CONCAT(...)
Sam--Mike--Bob

(Id 101=Sam, 105=Mike, 110=Bob → sắp xếp Id ASC: Sam, Mike, Bob)

Ứng dụng thực tế

  • Danh sách tag/categories theo alphabet: GROUP_CONCAT(tag ORDER BY tag)
  • Lịch sử hành động theo thời gian: GROUP_CONCAT(action ORDER BY created_at)
  • Xuất CSV có thứ tự xác định.

Lưu ý

  • Mặc định SEPARATOR là dấu phẩy ','.
  • Độ dài tối đa: group_concat_max_len (default 1024). Tăng nếu cần: SET SESSION group_concat_max_len = 1000000;
  • DISTINCT có thể kết hợp: GROUP_CONCAT(DISTINCT name ORDER BY name).