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

Gộp chuỗi nhiều hàng thành một hàng + tính tổng ID trong MySQL (GROUP_CONCAT + SUM)

Vấn đề: Kết hợp GROUP_CONCAT (nối chuỗi) và SUM (tổng ID) trong một truy vấn

Bảng sinh viên có StudentId, StudentName. Cần 1 hàng kết quả: danh sách tên nối bằng dấu chấm, và tổng StudentId.

Giải pháp: GROUP_CONCAT + SUM không cần GROUP BY (tổng cả bảng)

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

CREATE TABLE DemoTable (
    StudentId INT,
    StudentName VARCHAR(20)
);

INSERT INTO DemoTable VALUES
(100, 'Chris'), (101, 'Bob'), (102, 'David'), (103, 'Mike');

2. Truy vấn

SELECT 
    SUM(StudentId) AS TotalId,
    GROUP_CONCAT(StudentName SEPARATOR '.') AS ListOfStudent
FROM DemoTable;

3. Kết quả

+---------+----------------------+
| TotalId | ListOfStudent        |
+---------+----------------------+
|     406 | Chris.Bob.David.Mike |
+---------+----------------------+

Giải thích

  • SUM(StudentId) – 100+101+102+103 = 406.
  • GROUP_CONCAT(StudentName SEPARATOR '.') – Nối tên, phân cách bằng dấu chấm. Mặc định phân cách bằng ','.
  • Không có GROUP BY → gom toàn bảng thành 1 nhóm.

Lưu ý quan trọng GROUP_CONCAT

  • Độ dài tối đa mặc định: 1024 byte (group_concat_max_len system variable). Dữ liệu lớn → bị cắt. Tăng: SET SESSION group_concat_max_len = 1000000;.
  • Sắp xếp trong chuỗi: GROUP_CONCAT(StudentName ORDER BY StudentId SEPARATOR '.').
  • Loại trùng: GROUP_CONCAT(DISTINCT StudentName ...).
  • Trả về NULL nếu không có hàng (hoặc tất cả NULL).

Ứng dụng

  • Xuất báo cáo tóm tắt (CSV-like).
  • Tạo danh sách ID cho truy vấn IN động.
  • Aggregate cho JSON output.