MySQL में शर्ती गिनती (कंडीशनल काउंट) करने के लिए SUM(CASE WHEN ... THEN 1 ELSE 0 END) पैटर्न का उपयोग करें। यह एक ही क्वेरी में एकाधिक शर्तों की गिनती करने का कुशल तरीका है।
उदाहरण: विशिष्ट मार्क्स की गिनती प्रति छात्र
डेमो टेबल बनाएं:
mysql> CREATE TABLE DemoTable1910 (
FirstName VARCHAR(20),
Marks INT
);
डेटा इन्सर्ट करें:
mysql> INSERT INTO DemoTable1910 VALUES
('Chris', 45), ('David', 85), ('Chris', 55), ('Chris', 98), ('David', 98);
डेटा:
+-----------+-------+ | FirstName | Marks | +-----------+-------+ | Chris | 45 | | David | 85 | | Chris | 55 | | Chris | 98 | | David | 98 | +-----------+-------+
CASE WHEN के साथ कंडीशनल काउंट:
mysql> SELECT FirstName,
SUM(CASE WHEN Marks = 45 THEN 1 ELSE 0 END) AS count_45,
SUM(CASE WHEN Marks = 98 THEN 1 ELSE 0 END) AS count_98
FROM DemoTable1910
GROUP BY FirstName;
आउटपुट:
+-----------+----------+----------+ | FirstName | count_45 | count_98 | +-----------+----------+----------+ | Chris | 1 | 1 | | David | 0 | 1 | +-----------+----------+----------+
यह कैसे काम करता है
CASE WHEN Marks = 45 THEN 1 ELSE 0 ENDप्रत्येक पंक्ति के लिए 1 या 0 लौटाता हैSUM()उन 1s को जोड़ता है = गिनतीGROUP BY FirstNameप्रति छात्र गिनती देता है
वैकल्पिक: COUNT() के साथ FILTER (MySQL 8.0+ सपोर्ट नहीं करता)
PostgreSQL में: COUNT(*) FILTER (WHERE Marks = 45)
MySQL में SUM(CASE...) मानक तरीका है।
अन्य उपयोगी पैटर्न
रेंज काउंट
SUM(CASE WHEN Marks BETWEEN 90 AND 100 THEN 1 ELSE 0 END) AS distinction_count
NULL गिनती
SUM(CASE WHEN Marks IS NULL THEN 1 ELSE 0 END) AS null_count
बूलियन एक्सप्रेशन (MySQL में TRUE=1, FALSE=0)
SUM(Marks = 98) AS count_98 -- MySQL में काम करता है!
पिवट टेबल / क्रॉस-टैब बनाना
SELECT
FirstName,
SUM(CASE WHEN Marks >= 90 THEN 1 ELSE 0 END) AS '90+',
SUM(CASE WHEN Marks BETWEEN 70 AND 89 THEN 1 ELSE 0 END) AS '70-89',
SUM(CASE WHEN Marks < 70 THEN 1 ELSE 0 END) AS 'Below 70'
FROM DemoTable1910
GROUP BY FirstName;
यह पैटर्न रिपोर्टिंग, एनालिटिक्स, और डैशबोर्ड क्वेरीज़ के लिए मौलिक है।