MySQL में CASE WHEN के साथ GROUP BY परिणामों में काउंट को कैप करना
CASE WHEN एक्सप्रेशन का उपयोग GROUP BY के साथ करके एग्रीगेट मानों पर सशर्त तर्क लागू किया जा सकता है, जैसे काउंट को अधिकतम मान तक सीमित करना।
व्यावहारिक उदाहरण
तालिका बनाना
mysql> CREATE TABLE DemoTable (
UserId INT,
UserMessage VARCHAR(100)
);
रिकॉर्ड डालना
mysql> INSERT INTO DemoTable VALUES(1, 'Hi'); mysql> INSERT INTO DemoTable VALUES(2, 'Hello'); mysql> INSERT INTO DemoTable VALUES(2, 'Good'); mysql> INSERT INTO DemoTable VALUES(1, 'Nice'); mysql> INSERT INTO DemoTable VALUES(1, 'Awesome'); mysql> INSERT INTO DemoTable VALUES(1, 'Amazing'); mysql> INSERT INTO DemoTable VALUES(1, 'Good Morning');
सभी रिकॉर्ड देखना
mysql> SELECT * FROM DemoTable;
आउटपुट:
+--------+--------------+ | UserId | UserMessage | +--------+--------------+ | 1 | Hi | | 2 | Hello | | 2 | Good | | 1 | Nice | | 1 | Awesome | | 1 | Amazing | | 1 | Good Morning | +--------+--------------+
काउंट को 4 पर कैप करने के लिए क्वेरी
mysql> SELECT UserId, CASE WHEN COUNT(*) < 4 THEN COUNT(*) ELSE 'Greater Than 4' END AS 'NumberOfMessage' FROM DemoTable GROUP BY UserId;
आउटपुट:
+--------+-----------------+ | UserId | NumberOfMessage | +--------+-----------------+ | 1 | Greater Than 4 | | 2 | 2 | +--------+-----------------+
व्याख्या
- UserId 1 के 5 संदेश हैं → "Greater Than 4" दिखाता है
- UserId 2 के 2 संदेश हैं → वास्तविक काउंट 2 दिखाता है
CASE WHEN COUNT(*) < 4 THEN COUNT(*) ELSE 'Greater Than 4' END- सशर्त प्रदर्शन