MySQL में सशर्त गणना: SUM() के साथ CASE स्टेटमेंट
जब आपके पास एक ही ID के लिए कई पंक्तियों में वर्गीकृत डेटा (जैसे Yes/No) होता है, तो आप SUM() के साथ CASE स्टेटमेंट या बूलियन अभिव्यक्ति का उपयोग करके प्रत्येक श्रेणी की गिनती कर सकते हैं।
उदाहरण: कर्मचारी वैवाहिक स्थिति गणना
पहले एक ENUM कॉलम वाली टेबल बनाते हैं:
mysql> CREATE TABLE DemoTable1430 (
-> EmployeeId INT,
-> isMarried ENUM('YES', 'NO')
-> );
Query OK, 0 rows affected (0.60 sec)
mysql> INSERT INTO DemoTable1430 VALUES
-> (1001, 'Yes'), (1001, 'No'), (1001, 'Yes'), (1001, 'Yes');
Query OK, 4 rows affected (0.19 sec)
mysql> SELECT * FROM DemoTable1430;
+------------+-----------+
| EmployeeId | isMarried |
+------------+-----------+
| 1001 | YES |
| 1001 | NO |
| 1001 | YES |
| 1001 | YES |
+------------+-----------+
4 rows in set (0.00 sec)
सशर्त गणना क्वेरी
MySQL में बूलियन अभिव्यक्तियाँ 1 (सत्य) या 0 (असत्य) के रूप में मूल्यांकन करती हैं:
mysql> SELECT EmployeeId,
-> SUM(isMarried = 'Yes') AS NumberOfMarried,
-> SUM(isMarried = 'No') AS NumberOfUnMarried
-> FROM DemoTable1430
-> GROUP BY EmployeeId;
परिणाम
+------------+-----------------+-------------------+ | EmployeeId | NumberOfMarried | NumberOfUnMarried | +------------+-----------------+-------------------+ | 1001 | 3 | 1 | +------------+-----------------+-------------------+ 1 row in set (0.00 sec)
वैकल्पिक: CASE स्टेटमेंट सिंटैक्स
SELECT EmployeeId,
SUM(CASE WHEN isMarried = 'Yes' THEN 1 ELSE 0 END) AS NumberOfMarried,
SUM(CASE WHEN isMarried = 'No' THEN 1 ELSE 0 END) AS NumberOfUnMarried
FROM DemoTable1430
GROUP BY EmployeeId;
मुख्य लाभ
- एकल पास: एक क्वेरी में कई श्रेणियों की गिनती करता है
- लचीला: जटिल शर्तों को संभाल सकता है
- प्रदर्शन: कई COUNT() उप-क्वेरी से तेज़
- पठनीय: स्पष्ट रूप से गिनती तर्क दिखाता है
उपयोग के मामले
- सर्वेक्षण प्रतिक्रिया विश्लेषण
- स्थिति ट्रैकिंग (सक्रिय/निष्क्रिय/लंबित)
- श्रेणी-आधारित रिपोर्टिंग