สามารถใช้ฟังก์ชัน COALESCE() ร่วมกับฟังก์ชันรวม MAX() เพื่อแก้ปัญหานี้ได้
ไวยากรณ์
SELECT COALESCE(MAX(`yourColumnName`), 0) FROM yourTableName;
สร้างตารางตัวอย่าง
mysql> create table avoidNullDemo (
-> `rank` int
-> );
Query OK, 0 rows affected (0.53 sec)
เพิ่มข้อมูลตัวอย่าง (รวมค่า NULL)
mysql> insert into avoidNullDemo values(10); Query OK, 1 row affected (0.20 sec) mysql> insert into avoidNullDemo values(NULL); Query OK, 1 row affected (0.18 sec) mysql> insert into avoidNullDemo values(20); Query OK, 1 row affected (0.17 sec) mysql> insert into avoidNullDemo values(NULL); Query OK, 1 row affected (0.11 sec) mysql> insert into avoidNullDemo values(100); Query OK, 1 row affected (0.11 sec) mysql> insert into avoidNullDemo values(NULL); Query OK, 1 row affected (0.16 sec)
แสดงข้อมูลทั้งหมด
mysql> select * from avoidNullDemo;
ผลลัพธ์:
+------+ | rank | +------+ | 10 | | NULL | | 20 | | NULL | | 100 | | NULL | +------+ 6 rows in set (0.00 sec)
ใช้ COALESCE() กับ MAX()
mysql> select COALESCE(MAX(`rank`), 0) FROM avoidNullDemo;
ผลลัพธ์:
+--------------------------+ | COALESCE(MAX(`rank`), 0) | +--------------------------+ | 100 | +--------------------------+ 1 row in set (0.00 sec)
ทดสอบกับตารางว่างเปล่า
mysql> truncate table avoidNullDemo; Query OK, 0 rows affected (0.92 sec) mysql> select COALESCE(MAX(`rank`), 0) FROM avoidNullDemo;
ผลลัพธ์:
+--------------------------+ | COALESCE(MAX(`rank`), 0) | +--------------------------+ | 0 | +--------------------------+ 1 row in set (0.00 sec)
คำอธิบาย
MAX()จะคืนค่าNULLเมื่อตารางไม่มีข้อมูล หรือคอลัมน์มีแต่ค่า NULLCOALESCE()จะคืนค่าอาร์กิวเมนต์แรกที่ไม่ใช่ NULL ดังนั้นCOALESCE(MAX(rank), 0)จะคืนค่า 0 แทน NULL- วิธีนี้ใช้ได้กับฟังก์ชันรวมอื่นๆ เช่น
MIN(),SUM(),AVG()เช่นกัน