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

Nhóm và tính tổng điểm theo học sinh trong MySQL (GROUP BY + SUM)

Vấn đề: Tính tổng điểm cho mỗi học sinh từ bảng ghi nhận nhiều lần thi

Bảng lưu nhiều hàng cho cùng một học sinh (mỗi hàng là một lần thi). Cần gom nhóm theo tên và tính tổng điểm.

Giải pháp: GROUP BY + SUM()

Cú pháp chuẩn: SELECT column, SUM(numeric_column) FROM table GROUP BY column;

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

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

INSERT INTO DemoTable VALUES
('Chris', 67), ('David', 97), ('Chris', 57), ('David', 45), ('Chris', 89);

2. Dữ liệu gốc

+-------------+--------------+
| StudentName | StudentMarks |
+-------------+--------------+
| Chris       |           67 |
| David       |           97 |
| Chris       |           57 |
| David       |           45 |
| Chris       |           89 |
+-------------+--------------+

3. Truy vấn gom nhóm và tính tổng

SELECT StudentName, SUM(StudentMarks) AS TotalMarks 
FROM DemoTable 
GROUP BY StudentName;

4. Kết quả

+-------------+------------+
| StudentName | TotalMarks |
+-------------+------------+
| Chris       |        213 |
| David       |        142 |
+-------------+------------+

Giải thích

  • GROUP BY StudentName – Gom các hàng có cùng tên thành một nhóm.
  • SUM(StudentMarks) – Tính tổng cột điểm trong mỗi nhóm.
  • AS TotalMarks – Đặt alias cho cột kết quả.

Mở rộng: Nhóm theo nhiều cột

SELECT StudentName, Subject, SUM(Marks) 
FROM Scores 
GROUP BY StudentName, Subject;

Lưu ý

  • Các cột trong SELECT phải nằm trong GROUP BY hoặc là hàm tổng hợp (SUM, COUNT, AVG, MAX, MIN...).
  • MySQL 5.7+ mặc định bật ONLY_FULL_GROUP_BY – bắt buộc tuân thủ quy tắc này.
  • Để tính trung bình: AVG(StudentMarks).