समाधान: COUNT() के साथ IF()
किसी कॉलम में विशिष्ट मान की घटनाओं की गणना करने के लिए COUNT() के साथ IF() फ़ंक्शन का उपयोग करें।
सिंटैक्स
SELECT
COUNT(IF(yourColumnName = specificValue, 1, NULL))
FROM yourTableName;
व्यावहारिक उदाहरण
टेबल बनाना और डेटा डालना
mysql> CREATE TABLE countValueDemo (
-> ShippingDatetime DATETIME,
-> FirstValue INT,
-> SecondValue INT
-> );
mysql> INSERT INTO countValueDemo VALUES
-> ('2019-01-23', 1, 2),
-> ('2017-02-21', NULL, 2),
-> ('2016-04-12', 1, NULL);
डेटा
| ShippingDatetime | FirstValue | SecondValue |
|---|---|---|
| 2019-01-23 | 1 | 2 |
| 2017-02-21 | NULL | 2 |
| 2016-04-12 | 1 | NULL |
मान-विशिष्ट गणना क्वेरी
mysql> SELECT
-> ShippingDatetime,
-> COUNT(*),
-> COUNT(IF(FirstValue = 1, 1, NULL)) AS first_val_1_count,
-> COUNT(IF(SecondValue = 2, 1, NULL)) AS second_val_2_count
-> FROM countValueDemo;
परिणाम
+---------------------+----------+-------------------+--------------------+ | ShippingDatetime | COUNT(*) | first_val_1_count | second_val_2_count | +---------------------+----------+-------------------+--------------------+ | 2019-01-23 00:00:00 | 3 | 2 | 2 | +---------------------+----------+-------------------+--------------------+
व्याख्या
COUNT(*)= कुल 3 पंक्तियाँFirstValue = 12 पंक्तियों में (पंक्ति 1 और 3)SecondValue = 22 पंक्तियों में (पंक्ति 1 और 2)COUNT()NULL मानों को नहीं गिनता, इसलिए IF में ELSE NULL महत्वपूर्ण है
आधुनिक विकल्प (MySQL 8.0+)
SELECT
COUNT(*) FILTER (WHERE FirstValue = 1) AS first_val_1_count,
COUNT(*) FILTER (WHERE SecondValue = 2) AS second_val_2_count
FROM countValueDemo;
संबंधित: CASE के साथ
SELECT
SUM(CASE WHEN FirstValue = 1 THEN 1 ELSE 0 END) AS first_val_1_count
FROM countValueDemo;