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

Nhóm và tính tổng theo môn học trong MySQL với GROUP BY SUM

Tổng hợp điểm theo môn học với GROUP BY và SUM()

Sử dụng GROUP BY Subject để chia dữ liệu thành các nhóm theo môn học, sau đó SUM(Marks) tính tổng điểm của mỗi nhóm.

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

mysql> CREATE TABLE DemoTable (
    Name VARCHAR(40),
    Subject VARCHAR(40),
    Marks INT
);
mysql> INSERT INTO DemoTable VALUES
    ('Chris', 'MySQL', 76), ('Sam', 'MongoDB', 86), ('Mike', 'MySQL', 98),
    ('David', 'Java', 93), ('Bob', 'MySQL', 57), ('John', 'MongoDB', 77);

2. Xem dữ liệu

mysql> SELECT * FROM DemoTable;
+-------+---------+-------+
| Name  | Subject | Marks |
+-------+---------+-------+
| Chris | MySQL   | 76    |
| Sam   | MongoDB | 86    |
| Mike  | MySQL   | 98    |
| David | Java    | 93    |
| Bob   | MySQL   | 57    |
| John  | MongoDB | 77    |
+-------+---------+-------+

3. Truy vấn: Nhóm theo Subject, tính tổng Marks

mysql> SELECT Subject, SUM(Marks) FROM DemoTable GROUP BY Subject;

4. Kết quả

+---------+------------+
| Subject | SUM(Marks) |
+---------+------------+
| MySQL   | 231        |
| MongoDB | 163        |
| Java    | 93         |
+---------+------------+

Phân tích:

  • MySQL: 76 + 98 + 57 = 231 (3 sinh viên)
  • MongoDB: 86 + 77 = 163 (2 sinh viên)
  • Java: 93 (1 sinh viên)

Mở rộng - Thêm COUNT, AVG, MIN, MAX:

SELECT Subject,
       COUNT(*) AS StudentCount,
       SUM(Marks) AS TotalMarks,
       AVG(Marks) AS AvgMarks,
       MIN(Marks) AS MinMarks,
       MAX(Marks) AS MaxMarks
FROM DemoTable
GROUP BY Subject;
+---------+--------------+------------+----------+----------+----------+
| Subject | StudentCount | TotalMarks | AvgMarks | MinMarks | MaxMarks |
+---------+--------------+------------+----------+----------+----------+
| MySQL   | 3            | 231        | 77.0000  | 57       | 98       |
| MongoDB | 2            | 163        | 81.5000  | 77       | 86       |
| Java    | 1            | 93         | 93.0000  | 93       | 93       |
+---------+--------------+------------+----------+----------+----------+

Lưu ý: Cột trong SELECT phải là cột GROUP BY hoặc hàm tổng hợp. MySQL (sql_mode=ONLY_FULL_GROUP_BY) bắt buộc tuân thủ quy tắc này.