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

ทำให้ SUM() ใน MySQL คืนค่า 0 แทน NULL เมื่อไม่มีข้อมูล

ฟังก์ชัน SUM() จะคืนค่า NULL เมื่อไม่มีแถวที่ Match (Empty Result Set) ใช้ IFNULL() หรือ COALESCE() เพื่อแปลงเป็น 0

ปัญหา

SELECT SUM(NULL);
-- ผลลัพธ์: NULL (ไม่ใช่ 0)

วิธีที่ 1: IFNULL() - MySQL Specific

SELECT IFNULL(SUM(NULL), 0) AS SUMOFTWO;
-- ผลลัพธ์: 0

วิธีที่ 2: COALESCE() - ANSI Standard (แนะนำ)

SELECT COALESCE(SUM(NULL), 0) AS SUMOFTWO;
-- ผลลัพธ์: 0

ตัวอย่างใช้งานจริง

-- ตาราง Sales
CREATE TABLE sales (
    id INT PRIMARY KEY,
    amount DECIMAL(10,2),
    sale_date DATE
);

-- Query ยอดขายรายวัน (วันที่ไม่มียอดขาย = 0)
SELECT 
    sale_date,
    COALESCE(SUM(amount), 0) AS daily_total
FROM sales
WHERE sale_date BETWEEN '2024-01-01' AND '2024-01-31'
GROUP BY sale_date
ORDER BY sale_date;

ความแตกต่าง IFNULL vs COALESCE

คุณสมบัติIFNULLCOALESCE
StandardMySQL SpecificANSI SQL Standard
Arguments2 arguments เท่านั้นMultiple arguments (2+)
PortabilityMySQL OnlyCross-Database
Performanceเร็วกว่าเล็กน้อยคล้ายกัน

ตัวอย่าง COALESCE หลาย Arguments

-- คืนค่าแรกที่ไม่ใช่ NULL
SELECT COALESCE(NULL, NULL, 'default', 'fallback');
-- ผลลัพธ์: 'default'

-- ใช้ในคำนวณ
SELECT COALESCE(SUM(sales), 0) + COALESCE(SUM(returns), 0) AS net_sales
FROM daily_report;

Best Practice

  • ✅ ใช้ COALESCE เป็นหลัก (Standard, ยืดหยุ่น)
  • ✅ ใช้ IFNULL เฉพาะ Logic เรียบง่าย 2 ค่า
  • ✅ ตั้ง Default Value ใน Schema: amount DECIMAL(10,2) DEFAULT 0
  • ✅ ใช้ IFNULL/COALESCE รอบนอก Aggregate Function (SUM, AVG, COUNT)