MySQL में CASE WHEN का उपयोग करके सशर्त तर्क
MySQL में CASE WHEN अभिव्यक्ति आपको SQL क्वेरीज़ के अंदर सशर्त तर्क (if-else तर्क) लागू करने की अनुमति देती है। यह SELECT, WHERE, ORDER BY, GROUP BY आदि में उपयोग किया जा सकता है।
टेबल बनाना
mysql> CREATE TABLE DemoTable (
-> FirstName VARCHAR(20),
-> Score INT
-> );
Query OK, 0 rows affected (0.63 sec)
डेटा डालना
mysql> INSERT INTO DemoTable VALUES ('John', 46);
Query OK, 1 row affected (0.16 sec)
mysql> INSERT INTO DemoTable VALUES ('John', 78);
Query OK, 1 row affected (0.13 sec)
mysql> INSERT INTO DemoTable VALUES ('John', 69);
Query OK, 1 row affected (0.14 sec)
mysql> INSERT INTO DemoTable VALUES ('Chris', 78);
Query OK, 1 row affected (0.12 sec)
mysql> INSERT INTO DemoTable VALUES ('Chris', 89);
Query OK, 1 row affected (0.17 sec)
सभी रिकॉर्ड्स देखना
mysql> SELECT * FROM DemoTable;
+-----------+-------+
| FirstName | Score |
+-----------+-------+
| John | 46 |
| John | 78 |
| John | 69 |
| Chris | 78 |
| Chris | 89 |
+-----------+-------+
5 rows in set (0.00 sec)
CASE WHEN का उपयोग करके जांचें कि क्या स्कोर 69 मौजूद है
mysql> SELECT FirstName,
-> MAX(CASE WHEN Score = 69 THEN 1 ELSE 0 END) AS isExistsOrNot
-> FROM DemoTable
-> GROUP BY FirstName;
परिणाम
+-----------+---------------+
| FirstName | isExistsOrNot |
+-----------+---------------+
| John | 1 |
| Chris | 0 |
+-----------+---------------+
2 rows in set (0.00 sec)
व्याख्या
- CASE WHEN Score = 69 THEN 1 ELSE 0 END: प्रत्येक पंक्ति के लिए, यदि स्कोर 69 है तो 1 लौटाता है, अन्यथा 0
- MAX(...): प्रत्येक नाम समूह के लिए, यदि कोई पंक्ति 1 लौटाती है, तो MAX 1 होगा
- GROUP BY FirstName: नाम के अनुसार परिणाम समूहित करता है
CASE सिंटैक्स के दो रूप
1. सरल CASE (मान की तुलना)
CASE expression
WHEN value1 THEN result1
WHEN value2 THEN result2
...
ELSE default_result
END
2. खोजा गया CASE (शर्तों का मूल्यांकन) - अधिक लचीला
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
...
ELSE default_result
END
व्यावहारिक उदाहरण
स्कोर ग्रेडिंग
SELECT FirstName, Score,
CASE
WHEN Score >= 90 THEN 'A'
WHEN Score >= 80 THEN 'B'
WHEN Score >= 70 THEN 'C'
WHEN Score >= 60 THEN 'D'
ELSE 'F'
END AS Grade
FROM DemoTable;
सशर्त गणना
SELECT FirstName,
SUM(CASE WHEN Score >= 80 THEN 1 ELSE 0 END) AS HighScores,
SUM(CASE WHEN Score < 60 THEN 1 ELSE 0 END) AS LowScores
FROM DemoTable
GROUP BY FirstName;
ORDER BY में CASE
SELECT * FROM DemoTable
ORDER BY CASE
WHEN FirstName = 'John' THEN 1
WHEN FirstName = 'Chris' THEN 2
ELSE 3
END;
WHERE में CASE (कम आम)
SELECT * FROM DemoTable
WHERE CASE
WHEN FirstName = 'John' THEN Score > 70
ELSE Score > 80
END;
सर्वोत्तम अभ्यास
- हमेशा
ELSEक्लॉज शामिल करें (NULL से बचने के लिए) - सरल तुलनाओं के लिए सरल CASE का उपयोग करें
- जटिल शर्तों के लिए खोजा गया CASE का उपयोग करें
- नेस्टेड CASE से बचें - पठनीयता के लिए CTE या व्यू का उपयोग करें