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

MySQL รวมคะแนน (SUM) ของชื่อซ้ำกันด้วย GROUP BY

ใช้ SUM() ร่วมกับ GROUP BY เพื่อรวมค่าตัวเลขของแถวที่มีค่าคอลัมน์สำคัญ (Key) ซ้ำกัน

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

1. สร้างตารางคะแนนนักเรียน

mysql> CREATE TABLE DemoTable (
    StudentName VARCHAR(20),
    StudentMarks INT
);
Query OK, 0 rows affected (0.68 sec)

2. เพิ่มข้อมูล (มีนักเรียนซ้ำชื่อ)

mysql> INSERT INTO DemoTable VALUES('Chris', 50);
mysql> INSERT INTO DemoTable VALUES('David', 70);
mysql> INSERT INTO DemoTable VALUES('Chris', 80);  -- Chris อีกครั้ง
mysql> INSERT INTO DemoTable VALUES('David', 90);  -- David อีกครั้ง

3. แสดงข้อมูลเดิม

mysql> SELECT * FROM DemoTable;
+-------------+--------------+
| StudentName | StudentMarks |
+-------------+--------------+
| Chris       |           50 |
| David       |           70 |
| Chris       |           80 |
| David       |           90 |
+-------------+--------------+

4. Query รวมคะแนนตามชื่อ

mysql> SELECT StudentName, SUM(StudentMarks) 
    -> FROM DemoTable 
    -> GROUP BY StudentName;

5. ผลลัพธ์

+-------------+-------------------+
| StudentName | SUM(StudentMarks) |
+-------------+-------------------+
| Chris       |               130 |
| David       |               160 |
+-------------+-------------------+

คำอธิบาย

  • GROUP BY StudentName : จัดกลุ่มแถวที่มีชื่อเหมือนกัน
  • SUM(StudentMarks) : บวกคะแนนในแต่ละกลุ่ม
  • Chris: 50 + 80 = 130 | David: 70 + 90 = 160

ขยาย: เพิ่มฟังก์ชันรวมอื่นๆ

SELECT 
    StudentName,
    COUNT(*) AS ExamCount,
    SUM(StudentMarks) AS TotalMarks,
    AVG(StudentMarks) AS AvgMarks,
    MIN(StudentMarks) AS MinMarks,
    MAX(StudentMarks) AS MaxMarks
FROM DemoTable
GROUP BY StudentName;

ผลลัพธ์

+-------------+-----------+------------+----------+----------+----------+
| StudentName | ExamCount | TotalMarks | AvgMarks | MinMarks | MaxMarks |
+-------------+-----------+------------+----------+----------+----------+
| Chris       |         2 |        130 |    65.00 |       50 |       80 |
| David       |         2 |        160 |    80.00 |       70 |       90 |
+-------------+-----------+------------+----------+----------+----------+

สรุป

GROUP BY + SUM() (และ Aggregate Functions อื่นๆ) เป็นวิธีมาตรฐานในการสรุปข้อมูล (Aggregation) ตาม Key ที่ซ้ำกัน ใช้ได้กับทุก Database