ใช้ 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