MySQL में COUNT(*) और उपक्वेरी का उपयोग करके दो सेट की गिनती और विभाजन
दो अलग-अलग शर्तों वाले पंक्ति सेट की गिनती प्राप्त करने और उनके अनुपात की गणना करने के लिए, आप उपक्वेरी (subqueries) के साथ COUNT(*) का उपयोग कर सकते हैं।
उदाहरण के साथ पूर्ण कार्यान्वयन
आइए पहले एक टेबल बनाते हैं:
mysql> CREATE TABLE DemoTable (isMarried TINYINT(1));
रिकॉर्ड डालना
mysql> INSERT INTO DemoTable VALUES(1), (0), (1), (1), (1);
सभी रिकॉर्ड प्रदर्शित करना
mysql> SELECT * FROM DemoTable;
आउटपुट:
+-----------+
| isMarried |
+-----------+
| 1 |
| 0 |
| 1 |
| 1 |
| 1 |
+-----------+
5 rows in set (0.00 sec)
दोनों सेट की गिनती और विभाजन के लिए क्वेरी
mysql> SELECT
(SELECT COUNT(*) FROM DemoTable WHERE isMarried = 1) /
(SELECT COUNT(*) FROM DemoTable WHERE isMarried = 0) AS divide
FROM DUAL;
आउटपुट:
+--------+
| divide |
+--------+
| 4.0000 |
+--------+
1 row in set (0.00 sec)
व्याख्या:
- पहली उपक्वेरी:
isMarried = 1वाली 4 पंक्तियाँ गिनती है - दूसरी उपक्वेरी:
isMarried = 0वाली 1 पंक्ति गिनती है - विभाजन: 4 ÷ 1 = 4.0000
FROM DUALMySQL में एक डमी टेबल है जब किसी वास्तविक टेबल की आवश्यकता नहीं होती
बेहतर तरीका: कंडीशनल एग्रीगेशन
अधिक कुशल और पठनीय दृष्टिकोण:
mysql> SELECT
SUM(CASE WHEN isMarried = 1 THEN 1 ELSE 0 END) /
SUM(CASE WHEN isMarried = 0 THEN 1 ELSE 0 END) AS divide
FROM DemoTable;
यह एक ही टेबल स्कैन में दोनों गिनती करता है, जिससे प्रदर्शन बेहतर होता है।
सावधानी:
यदि हर (denominator) शून्य है, तो परिणाम NULL होगा। इसे संभालने के लिए NULLIF() या IF() का उपयोग करें।