Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

รวมคะแนนนักเรียนแยกตามคนด้วย GROUP BY และ SUM ใน MySQL

ใช้ GROUP BY ร่วมกับ SUM() เพื่อรวมคะแนนของนักเรียนแต่ละคน แสดงผลรวมในคอลัมน์แยก

Syntax

SELECT student_name, SUM(student_marks) AS total_marks 
FROM table_name 
GROUP BY student_name;

ตัวอย่างการใช้งาน

1. สร้างตารางและเพิ่มข้อมูล

mysql> create table DemoTable1920 ( StudentName varchar(20), StudentMarks int ); Query OK, 0 rows affected (0.00 sec)

mysql> insert into DemoTable1920 values('Chris',67); Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1920 values('David',97); Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1920 values('Chris',57); Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1920 values('David',45); Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1920 values('Chris',89); Query OK, 1 row affected (0.00 sec)

ข้อมูลทั้งหมด:

mysql> select * from DemoTable1920;
+-------------+--------------+
| StudentName | StudentMarks |
+-------------+--------------+
| Chris       |           67 |
| David       |           97 |
| Chris       |           57 |
| David       |           45 |
| Chris       |           89 |
+-------------+--------------+
5 rows in set (0.00 sec)

2. จัดกลุ่มและรวมคะแนน

mysql> select StudentName, SUM(StudentMarks) as TotalMarks 
    -> from DemoTable1920 
    -> group by StudentName;

ผลลัพธ์:

+-------------+------------+
| StudentName | TotalMarks |
+-------------+------------+
| Chris       |        213 |
| David       |        142 |
+-------------+------------+
2 rows in set (0.00 sec)

การคำนวณ: Chris = 67+57+89 = 213, David = 97+45 = 142

ฟังก์ชัน Aggregate อื่นที่ใช้กับ GROUP BY

ฟังก์ชันความหมายตัวอย่าง
SUM()ผลรวมSUM(marks)
AVG()ค่าเฉลี่ยAVG(marks)
COUNT()จำนวนแถวCOUNT(*)
MIN()ค่าต่ำสุดMIN(marks)
MAX()ค่าสูงสุดMAX(marks)
GROUP_CONCAT()รวมค่าเป็นสตริงGROUP_CONCAT(marks SEPARATOR ',')

ตัวอย่างขยาย: สรุปครบถ้วน

SELECT 
    StudentName,
    COUNT(*) as ExamCount,
    SUM(StudentMarks) as TotalMarks,
    AVG(StudentMarks) as AvgMarks,
    MIN(StudentMarks) as MinMarks,
    MAX(StudentMarks) as MaxMarks,
    GROUP_CONCAT(StudentMarks ORDER BY StudentMarks) as AllMarks
FROM DemoTable1920 
GROUP BY StudentName;

สรุป: ใช้ GROUP BY student_name ร่วม SUM(marks) เพื่อรวมคะแนนต่อคน เพิ่ม Aggregate Functions อื่นได้ใน SELECT เดียวกัน