หากต้องการยกเว้นรายการที่มี “0” คุณต้องใช้ NULLIF() พร้อมฟังก์ชัน AVG()
ไวยากรณ์มีดังนี้
เลือก AVG(NULLIF(yourColumnName, 0)) AS anyAliasName จาก yourTableName
เรามาสร้างตารางกันก่อน
mysql> สร้างตาราง AverageDemo -> ( -> Id int ไม่ใช่ NULL AUTO_INCREMENT PRIMARY KEY, -> StudentName varchar(20), -> StudentMarks int -> );Query OK, 0 แถวได้รับผลกระทบ (0.72 วินาที)
แทรกบางระเบียนในตารางโดยใช้คำสั่ง insert
แบบสอบถามมีดังนี้
mysql> แทรกลงในค่า AverageDemo (StudentName,StudentMarks) ('Adam', NULL); แบบสอบถามตกลง 1 แถวได้รับผลกระทบ (0.12 วินาที) mysql> แทรกลงในค่า AverageDemo (StudentName, StudentMarks) ('Larry', 23);แบบสอบถามตกลง 1 แถวได้รับผลกระทบ (0.19 วินาที)mysql> แทรกลงใน AverageDemo(StudentName,StudentMarks) ค่า('Mike',0);แบบสอบถามตกลง 1 แถวได้รับผลกระทบ (0.20 วินาที)mysql> แทรกลงใน AverageDemo(StudentName,StudentMarks) values('Sam',45);Query OK, 1 แถวได้รับผลกระทบ (0.18 วินาที)mysql> แทรกลงใน AverageDemo(StudentName,StudentMarks) values('Bob',0);Query OK, 1 แถวได้รับผลกระทบ (0.12 วินาที)mysql> แทรกลงในค่า AverageDemo(StudentName,StudentMarks) ('David',32);สืบค้นตกลง ได้รับผลกระทบ 1 แถว (0.18 วินาที)
แสดงระเบียนทั้งหมดจากตารางโดยใช้คำสั่ง select
แบบสอบถามมีดังนี้
mysql> เลือก *จาก AverageDemo;
ต่อไปนี้เป็นผลลัพธ์
<ก่อนหน้า>+----+-------------+--------------+| รหัส | ชื่อนักเรียน | StudentMarks |+----+-------------+-------------+| 1 | อดัม | NULL || 2 | แลร์รี่ | 23 || 3 | ไมค์ | 0 || 4 | แซม | 45 || 5 | บ๊อบ | 0 || 6 | เดวิด | 32 |+----+-------------+--------------+6 แถวในชุด (0.00 วินาที)ต่อไปนี้เป็นแบบสอบถามเพื่อแยกรายการที่มี “0” ในขณะที่ใช้ AVG
mysql> เลือก AVG(nullif(StudentMarks, 0)) AS Exclude0Avg จาก AverageDemo;
ต่อไปนี้เป็นผลลัพธ์
<ก่อนหน้า>+-------------+| Exclude0Avg |+-------------+| 33.3333 |+-------------+1 แถวในชุด (0.05 วินาที)