ใช้ 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 เดียวกัน