คำอธิบาย
ใช้ GROUP BY จัดกลุ่มตามวิชา (Subject) และ SUM() รวมคะแนนในแต่ละกลุ่ม
ขั้นตอนการสร้างตารางและข้อมูลตัวอย่าง
mysql> create table DemoTable (
Name varchar(40),
Subject varchar(40),
Marks int );
Query OK, 0 rows affected (2.89 sec)
การเพิ่มข้อมูล
mysql> insert into DemoTable values('Chris', 'MySQL', 76);
Query OK, 1 row affected (0.32 sec)
mysql> insert into DemoTable values('Sam', 'MongoDB', 86);
Query OK, 1 row affected (0.39 sec)
mysql> insert into DemoTable values('Mike', 'MySQL', 98);
Query OK, 1 row affected (0.46 sec)
mysql> insert into DemoTable values('David', 'Java', 93);
Query OK, 1 row affected (0.32 sec)
mysql> insert into DemoTable values('Bob', 'MySQL', 57);
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable values('John', 'MongoDB', 77);
Query OK, 1 row affected (0.17 sec)
แสดงข้อมูลทั้งหมด
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 | +-------+---------+-------+ 6 rows in set (0.00 sec)
คิวรี่ GROUP BY Subject และ SUM(Marks)
mysql> select Subject, SUM(Marks) from DemoTable group by Subject;
ผลลัพธ์
+---------+------------+ | Subject | SUM(Marks) | +---------+------------+ | MySQL | 231 | | MongoDB | 163 | | Java | 93 | +---------+------------+ 3 rows in set (0.00 sec)
คำอธิบายการคำนวณ
| Subject | Marks | SUM |
|---|---|---|
| MySQL | 76 + 98 + 57 | 231 |
| MongoDB | 86 + 77 | 163 |
| Java | 93 | 93 |
Aggregate Functions อื่นๆ ที่ใช้กับ GROUP BY
- COUNT(*): นับจำนวนแถวในกลุ่ม
- AVG(): ค่าเฉลี่ย
- MIN(), MAX(): ค่าต่ำสุด/สูงสุด
- GROUP_CONCAT(): รวมค่าเป็นสตริง
HAVING กรองกลุ่ม
SELECT Subject, SUM(Marks) FROM DemoTable GROUP BY Subject HAVING SUM(Marks) > 200;
ได้เฉพาะ MySQL (231)