การคำนวณค่าเฉลี่ยต่อกลุ่มด้วย AVG() และ GROUP BY
เมื่อต้องการหาค่าเฉลี่ยของคอลัมน์ตัวเลข จัดกลุ่มตามคอลัมน์ ID เราใช้ฟังก์ชัน AVG() ร่วมกับ GROUP BY
สร้างตารางและเพิ่มข้อมูล
mysql> CREATE TABLE DemoTable (
StudentId INT,
StudentMarks INT
);
Query OK, 0 rows affected (0.83 sec)
mysql> INSERT INTO DemoTable VALUES(1000,78);
mysql> INSERT INTO DemoTable VALUES(1001,88);
mysql> INSERT INTO DemoTable VALUES(1000,89);
mysql> INSERT INTO DemoTable VALUES(1000,67);
mysql> INSERT INTO DemoTable VALUES(1000,90);
mysql> INSERT INTO DemoTable VALUES(1001,91);
แสดงข้อมูลทั้งหมด
mysql> SELECT * FROM DemoTable;
ผลลัพธ์:
+-----------+--------------+
| StudentId | StudentMarks |
+-----------+--------------+
| 1000 | 78 |
| 1001 | 88 |
| 1000 | 89 |
| 1000 | 67 |
| 1000 | 90 |
| 1001 | 91 |
+-----------+--------------+
6 rows in set (0.00 sec)
คำสั่งหาค่าเฉลี่ยคะแนนต่อ StudentId
mysql> SELECT StudentId, AVG(StudentMarks) FROM DemoTable GROUP BY StudentId;
ผลลัพธ์:
+-----------+-------------------+
| StudentId | avg(StudentMarks) |
+-----------+-------------------+
| 1000 | 81.0000 |
| 1001 | 89.5000 |
+-----------+-------------------+
2 rows in set (0.03 sec)
คำอธิบาย
GROUP BY StudentId: จัดกลุ่มแถวที่มี StudentId เดียวกันAVG(StudentMarks): คำนวณค่าเฉลี่ยของคะแนนในแต่ละกลุ่ม- StudentId 1000 มี 4 รายการ ค่าเฉลี่ย = (78+89+67+90)/4 = 81
- StudentId 1001 มี 2 รายการ ค่าเฉลี่ย = (88+91)/2 = 89.5