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

จัดการ NULL เป็น 0 และบวกคอลัมน์ใน MySQL ด้วย IFNULL()

เมื่อต้องการคำนวณค่ารวมจากหลายคอลัมน์ที่อาจมีค่า NULL ให้ใช้ IFNULL() แปลง NULL เป็น 0 ก่อนทำการบวก เพื่อป้องกันผลลัพธ์เป็น NULL

ปัญหา: NULL + ค่า = NULL

mysql> select 10 + NULL; -- ผลลัพธ์: NULL

สร้างตารางและข้อมูลมี NULL

mysql> create table DemoTable (
    Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    Value1 int, Value2 int
);
mysql> insert into DemoTable(Value1,Value2) values(10,20),(NULL,NULL),(40,NULL);

ข้อมูลในตาราง

+----+--------+--------+
| Id | Value1 | Value2 |
+----+--------+--------+
| 1  | 10     | 20     |
| 2  | NULL   | NULL   |
| 3  | 40     | NULL   |
+----+--------+--------+

คำสั่ง IFNULL แปลง NULL เป็น 0 แล้วบวก

mysql> select ifnull(Value1,0) + ifnull(Value2,0) AS NULL_AS_ZERO from DemoTable;

ผลลัพธ์

+--------------+
| NULL_AS_ZERO |
+--------------+
| 30           |
| 0            |
| 40           |
+--------------+

IFNULL() vs COALESCE()

ตัวอย่าง COALESCE หลายคอลัมน์

SELECT COALESCE(Value1, Value2, Value3, 0) as first_non_null
FROM DemoTable;

กรณีใช้งานจริง

  • คำนวณยอดรวมสั่งซื้อ: SUM(IFNULL(price, 0) * IFNULL(qty, 0))
  • คะแนนเฉลี่ย: AVG(IFNULL(score, 0)) vs AVG(score) (ข้าม NULL)
  • รายงานทางการเงิน: แสดง 0 แทน NULL

MySQL 8.0+ ใช้ IFNULL หรือ COALESCE ได้เหมือนกัน COALESCE เป็นมาตรฐาน ANSI SQL

ฟังก์ชันรูปแบบคำอธิบาย
IFNULLIFNULL(expr, value)MySQL เฉพาะ 2 อาร์กิวเมนต์
COALESCECOALESCE(val1, val2, ...)มาตรฐาน SQL รองรับหลายค่า
IFIF(expr IS NULL, 0, expr)ยาวกว่า แต่เข้าใจง่าย