Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> MySQL

MySQL में SUM() और CASE का उपयोग करके समान ID लेकिन अलग रिकॉर्ड्स के लिए Yes/No मानों की गिनती करना

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() उप-क्वेरी से तेज़
  • पठनीय: स्पष्ट रूप से गिनती तर्क दिखाता है

उपयोग के मामले

  • सर्वेक्षण प्रतिक्रिया विश्लेषण
  • स्थिति ट्रैकिंग (सक्रिय/निष्क्रिय/लंबित)
  • श्रेणी-आधारित रिपोर्टिंग
  1. - MySQL में डुप्लिकेट आईडी के लिए फ्लोटिंग कॉलम का न्यूनतम मान प्राप्त करें

    GROUP BY और MIN() से डुप्लिकेट आईडी समूह की न्यूनतम कीमत पाएं डुप्लिकेट आईडी वाले समूहों में फ्लोटिंग-पॉइंट कॉलम का न्यूनतम मान प्राप्त करने के लिए MIN() के साथ GROUP BY का उपयोग करें। टेबल बनाएं और डेटा डालें: mysql> create table DemoTable2005 ( Id int, Price float ); Query OK, 0 rows affected (

  1. - MySQL में GROUP_CONCAT और CONCAT_WS का उपयोग करके समान ID वाले रिकॉर्ड्स को विशेष वर्ण से अलग करके संयोजित करें

    MySQL में GROUP_CONCAT और CONCAT_WS के साथ पंक्तियों को समूहित करके संयोजित करना CONCAT_WS() (विभाजक के साथ संयोजित) और GROUP_CONCAT() को मिलाकर, आप एक कॉलम द्वारा पंक्तियों को समूहित कर सकते हैं और दूसरे कॉलम के मानों को कस्टम विभाजक के साथ एक ही स्ट्रिंग में जोड़ सकते हैं। टेबल बनाना ); Query OK

  1. - MySQL में ENUM के साथ सेट किए गए ACTIVE स्टेटस वाले रिकॉर्ड चुनें

    उदाहरण ENUM कॉलम के साथ टेबल बनाएं: ); डेटा डालें: INSERT INTO DemoTable2037 VALUES (99, Active), (99, Inactive), (100, Inactive), (99, Active), (100, Inactive), (101, Active), (101, Active); क्वेरी केवल ACTIVE स्टेटस वाले अद्वितीय StudentId प्राप्त करें: WHERE status = Active GROUP BY StudentI