जब SUM() को कोई पंक्ति नहीं मिलती या सभी मान NULL होते हैं, तो यह NULL वापस करता है। 0 पाने के लिए COALESCE() या IFNULL() उपयोग करें।
समस्या
mysql> SELECT SUM(NULL);
+----------+
| SUM(NULL) |
+----------+
| NULL |
+----------+
समाधान 1: COALESCE() (ANSI मानक, सुझाया गया)
mysql> SELECT COALESCE(SUM(NULL), 0) AS SUMOFTWO;
+----------+
| SUMOFTWO |
+----------+
| 0 |
+----------+
समाधान 2: IFNULL() (MySQL-विशिष्ट)
mysql> SELECT IFNULL(SUM(NULL), 0) AS SUMOFTWO;
+----------+
| SUMOFTWO |
+----------+
| 0 |
+----------+
व्यावहारिक उदाहरण
-- बिक्री रिपोर्ट: कोई बिक्री नहीं तो 0 दिखाएं
SELECT
product_id,
COALESCE(SUM(quantity), 0) AS total_sold
FROM sales
WHERE sale_date >= '2024-01-01'
GROUP BY product_id;
-- LEFT JOIN के बाद NULL से बचने के लिए
SELECT
p.name,
COALESCE(SUM(s.quantity), 0) AS total_sold
FROM products p
LEFT JOIN sales s ON p.id = s.product_id
GROUP BY p.id, p.name;
COALESCE vs IFNULL
| फंक्शन | पक्ष | विपक्ष |
|---|---|---|
COALESCE | ANSI SQL मानक, एकाधिक आर्गुमेंट (COALESCE(a,b,c,0)) | थोड़ा धीमा (नगण्य) |
IFNULL | MySQL में थोड़ा तेज़, केवल 2 आर्गुमेंट | पोर्टेबल नहीं |
नोट
SUM() NULL मानों को अनदेखा करता है (उन्हें गिनता नहीं)। केवल तब NULL वापस करता है जब कोई पंक्ति नहीं मिलती या सभी मान NULL होते हैं।