ฟังก์ชันรวม AVG() ใช้คำนวณค่าเฉลี่ยเลขคณิต (Arithmetic Mean) ของค่าตัวเลขในคอลัมน์
รูปแบบคำสั่ง
SELECT AVG(yourColumnName) AS average_value FROM yourTableName;
ตัวอย่างการใช้งาน
1. สร้างตารางคะแนนสอบ
mysql> CREATE TABLE AverageCalculateDemo (SubjectMarks INT);
Query OK, 0 rows affected (0.67 sec)
mysql> INSERT INTO AverageCalculateDemo VALUES (70), (80), (65), (55), (60);
2. ดูข้อมูลทั้งหมด
mysql> SELECT * FROM AverageCalculateDemo;
+--------------+
| SubjectMarks |
+--------------+
| 70 |
| 80 |
| 65 |
| 55 |
| 60 |
+--------------+
5 rows in set (0.00 sec)
3. คำนวณค่าเฉลี่ย
mysql> SELECT AVG(SubjectMarks) AS AverageOfNumbers FROM AverageCalculateDemo;
+-------------------+
| AverageOfNumbers |
+-------------------+
| 66.0000 |
+-------------------+
1 row in set (0.00 sec)
คำนวณ: (70+80+65+55+60) / 5 = 330 / 5 = 66
พฤติกรรมกับ NULL
AVG()**ข้ามค่า NULL** อัตโนมัติ (ไม่นับในตัวส่วนและตัวหาร)- หากทุกค่าเป็น NULL → คืนค่า
NULL
mysql> INSERT INTO AverageCalculateDemo VALUES (NULL);
mysql> SELECT AVG(SubjectMarks) FROM AverageCalculateDemo;
-- ยังคงเป็น 66.0000 (NULL ถูกข้าม)
ควบคุมทศนิยมด้วย ROUND()
SELECT ROUND(AVG(SubjectMarks), 2) AS avg_2_decimal FROM AverageCalculateDemo;
-- 66.00
SELECT ROUND(AVG(SubjectMarks), 0) AS avg_integer FROM AverageCalculateDemo;
-- 66
ใช้กับ GROUP BY
SELECT subject, AVG(score) AS avg_score, COUNT(*) AS student_count
FROM exam_results
GROUP BY subject
ORDER BY avg_score DESC;
AVG กับ ชนิดข้อมูลอื่น
| ชนิด | ผลลัพธ์ |
|---|---|
| INT, BIGINT | DECIMAL (มีทศนิยม) |
| DECIMAL, FLOAT, DOUBLE | ชนิดเดียวกันหรือสูงกว่า |
| DATE/DATETIME | ❌ Error (ใช้ AVG(UNIX_TIMESTAMP()) แทน) |
| TIME | ❌ Error |
ค่าเฉลี่ยแบบถ่วงน้ำหนัก (Weighted Average)
SELECT SUM(score * weight) / SUM(weight) AS weighted_avg
FROM grades;
ฟังก์ชันรวมคู่คู่
| ฟังก์ชัน | คำอธิบาย |
|---|---|
SUM() | ผลรวม |
AVG() | ค่าเฉลี่ย |
MIN() | ค่าต่ำสุด |
MAX() | ค่าสูงสุด |
COUNT() | นับจำนวน |
STD() / STDDEV() | ส่วนเบี่ยงเบนมาตรฐาน |
VARIANCE() | แปรปรวน |
ประสิทธิภาพ
- ต้อง Full Table Scan (หรือ Index Scan ถ้ามี Covering Index)
- สำหรับตารางใหญ่ ควรใช้ Summary Table / Materialized View
EXPLAIN SELECT AVG(col) FROM tableตรวจสอบ Execution Plan