MySQL में CASE स्टेटमेंट के साथ SUM() एग्रीगेट फ़ंक्शन का उपयोग करके आप सकारात्मक और नकारात्मक मानों की गिनती अलग-अलग कर सकते हैं। यह मतदान प्रणालियों, रेटिंग, या किसी भी संख्यात्मक प्रतिक्रिया विश्लेषण के लिए उपयोगी है।
उदाहरण तालिका बनाना
mysql> CREATE TABLE DemoTable (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
Vote INT
);
नमूना वोट डालना
mysql> INSERT INTO DemoTable (Vote) VALUES (-10), (100), (45), (-6), (-1000), (450);
सभी वोट देखना
mysql> SELECT * FROM DemoTable;
आउटपुट:
+----+-------+ | Id | Vote | +----+-------+ | 1 | -10 | | 2 | 100 | | 3 | 45 | | 4 | -6 | | 5 | -1000 | | 6 | 450 | +----+-------+
सकारात्मक और नकारात्मक वोटों की गिनती
mysql> SELECT
-> SUM(CASE WHEN Vote > 0 THEN 1 ELSE 0 END) AS Number_Of_Positive_Votes,
-> SUM(CASE WHEN Vote < 0 THEN 1 ELSE 0 END) AS Number_Of_Negative_Votes
-> FROM DemoTable;
आउटपुट:
+--------------------------+--------------------------+ | Number_Of_Positive_Votes | Number_Of_Negative_Votes | +--------------------------+--------------------------+ | 3 | 3 | +--------------------------+--------------------------+
व्याख्या: प्रत्येक CASE स्टेटमेंट शर्त की जांच करता है: सत्य होने पर 1 लौटाता है, असत्य होने पर 0। SUM() इन 1s को जोड़कर कुल गिनती देता है। यह COUNT(CASE WHEN ... THEN 1 END) के बराबर है क्योंकि COUNT केवल गैर-NULL मान गिनता है।
विस्तार: आप इसी पैटर्न का उपयोग करके मानों के योग (गिनती के बजाय) की गणना भी कर सकते हैं:
SELECT
SUM(CASE WHEN Vote > 0 THEN Vote ELSE 0 END) AS Sum_Positive,
SUM(CASE WHEN Vote < 0 THEN Vote ELSE 0 END) AS Sum_Negative
FROM DemoTable;