समाधान: CASE के साथ सशर्त SUM
एकल क्वेरी में बूलियन (0/1) फील्ड के सत्य और असत्य मानों की गणना करने के लिए SUM() के साथ शर्तीय अभिव्यक्ति का उपयोग करें।
व्यावहारिक उदाहरण
टेबल बनाना और डेटा डालना
mysql> CREATE TABLE countBooleanFieldDemo (
-> StudentId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> StudentFirstName VARCHAR(20),
-> isPassed TINYINT(1)
-> );
mysql> INSERT INTO countBooleanFieldDemo(StudentFirstName, isPassed) VALUES
-> ('Larry', 0), ('Mike', 1), ('Sam', 0), ('Carol', 1), ('Bob', 1),
-> ('David', 1), ('Ramit', 0), ('Chris', 1), ('Robert', 1);
डेटा (9 पंक्तियाँ)
उत्तीर्ण (1): 6 छात्र | अनुत्तीर्ण (0): 3 छात्र
गणना क्वेरी
mysql> SELECT
-> SUM(isPassed = 1) AS `True`,
-> SUM(isPassed = 0) AS `False`,
-> CASE WHEN SUM(isPassed = 1) > 0
-> THEN SUM(isPassed = 0) / SUM(isPassed = 1)
-> END AS TotalPercentage
-> FROM countBooleanFieldDemo;
परिणाम
+------+-------+-----------------+ | True | False | TotalPercentage | +------+-------+-----------------+ | 6 | 3 | 0.5000 | +------+-------+-----------------+
व्याख्या
isPassed = 1बूलियन अभिव्यक्ति है जो TRUE (1) या FALSE (0) लौटाती हैSUM()इन 1 और 0 को जोड़ता है, प्रभावी रूप से गिनती देता है- प्रतिशत = अनुत्तीर्ण / उत्तीर्ण = 3/6 = 0.5
सरल विकल्प
केवल गिनती
SELECT
SUM(isPassed) AS passed_count,
COUNT(*) - SUM(isPassed) AS failed_count
FROM countBooleanFieldDemo;
GROUP BY के साथ
SELECT
isPassed,
COUNT(*) AS count
FROM countBooleanFieldDemo
GROUP BY isPassed;
प्रदर्शन नोट
बड़े टेबल पर इंडेक्स (isPassed पर) प्रदर्शन में सुधार करेगा।