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

คำนวณค่าเฉลี่ยในคอลัมน์ MySQL ด้วย AVG()

ฟังก์ชันรวม 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, BIGINTDECIMAL (มีทศนิยม)
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