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

MySQL: GROUP BY และ SUM จัดกลุ่มและรวมค่าตามวิชา


คำอธิบาย

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

คำอธิบายการคำนวณ

SubjectMarksSUM
MySQL76 + 98 + 57231
MongoDB86 + 77163
Java9393

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)