MySQL में NULL मानों को संभालते हुए GREATEST() का उपयोग
MySQL का GREATEST() फ़ंक्शन दो या अधिक अभिव्यक्तियों में से सबसे बड़ा मान लौटाता है। हालांकि, यदि कोई तर्क NULL है, तो परिणाम NULL होता है। NULL मानों को संभालने के लिए IF() या COALESCE() का उपयोग करें।
टेबल बनाना
mysql> CREATE TABLE DemoTable (
-> Value1 INT,
-> Value2 INT
-> );
Query OK, 0 rows affected (0.77 sec)
NULL मानों सहित डेटा डालना
mysql> INSERT INTO DemoTable VALUES (78, 89);
Query OK, 1 row affected (0.17 sec)
mysql> INSERT INTO DemoTable VALUES (19, NULL);
Query OK, 1 row affected (0.23 sec)
mysql> INSERT INTO DemoTable VALUES (NULL, 0);
Query OK, 1 row affected (0.21 sec)
mysql> INSERT INTO DemoTable VALUES (NULL, 95);
Query OK, 1 row affected (0.15 sec)
सभी रिकॉर्ड्स देखना
mysql> SELECT * FROM DemoTable;
+--------+--------+
| Value1 | Value2 |
+--------+--------+
| 78 | 89 |
| 19 | NULL |
| NULL | 0 |
| NULL | 95 |
+--------+--------+
4 rows in set (0.00 sec)
NULL को 0 मानकर GREATEST खोजने का क्वेरी
mysql> SELECT GREATEST(
-> IF(Value1 IS NULL, 0, Value1),
-> IF(Value2 IS NULL, 0, Value2)
-> ) FROM DemoTable;
परिणाम
+-------------------------------------------------------------------+
| greatest(if(Value1 is null,0,Value1),if(Value2 is null,0,Value2)) |
+-------------------------------------------------------------------+
| 89 |
| 19 |
| 0 |
| 95 |
+-------------------------------------------------------------------+
4 rows in set (0.00 sec)
बेहतर विकल्प: COALESCE()
SELECT GREATEST(
COALESCE(Value1, 0),
COALESCE(Value2, 0)
) FROM DemoTable;
COALESCE() पहला गैर-NULL मान लौटाता है, जो अधिक संक्षिप्त और मानक SQL है।
पंक्ति-दर-पंक्ति व्याख्या
| Value1 | Value2 | COALESCE(Value1,0) | COALESCE(Value2,0) | GREATEST |
|---|---|---|---|---|
| 78 | 89 | 78 | 89 | 89 |
| 19 | NULL | 19 | 0 | 19 |
| NULL | 0 | 0 | 0 | 0 |
| NULL | 95 | 0 | 95 | 95 |
GREATEST vs LEAST
-- अधिकतम के लिए
SELECT GREATEST(COALESCE(Value1,0), COALESCE(Value2,0)) FROM DemoTable;
-- न्यूनतम के लिए (NULL को बड़े मान के रूप में मानते हुए)
SELECT LEAST(
COALESCE(Value1, 999999),
COALESCE(Value2, 999999)
) FROM DemoTable;
NULL को अलग तरीके से संभालना
यदि आप चाहते हैं कि NULL को "मान नहीं" माना जाए और केवल गैर-NULL मानों की तुलना की जाए:
SELECT
CASE
WHEN Value1 IS NULL AND Value2 IS NULL THEN NULL
WHEN Value1 IS NULL THEN Value2
WHEN Value2 IS NULL THEN Value1
ELSE GREATEST(Value1, Value2)
END AS MaxValue
FROM DemoTable;
संबंधित फ़ंक्शन
LEAST(): न्यूनतम मान लौटाता है (NULL होने पर NULL लौटाता है)COALESCE(): पहला गैर-NULL मान लौटाता हैIFNULL(): MySQL-विशिष्ट, दो तर्कों के लिए COALESCE के समानNULLIF(): यदि दो मान समान हैं तो NULL लौटाता है