CASE WHEN দিয়ে গ্রুপ বাই গুননাকে ক্যাপ (cap) করা
MySQL-এ GROUP BY দিয়ে গুননা করার সময় যদি নির্দিষ্ট সীমা (threshold) এর বেশি হলে একটি লেবেল (যেমন 'Greater Than 4') দেখাতে চান, তবে CASE WHEN ব্যবহার করা হয়।
টেবিল ও ডেটা
mysql> CREATE TABLE DemoTable (UserId INT, UserMessage VARCHAR(100)); mysql> INSERT INTO DemoTable VALUES(1,'Hi'), (2,'Hello'), (2,'Good'), (1,'Nice'), (1,'Awesome'), (1,'Amazing'), (1,'Good Morning');
সব রেকর্ড
+--------+--------------+ | UserId | UserMessage | +--------+--------------+ | 1 | Hi | | 2 | Hello | | 2 | Good | | 1 | Nice | | 1 | Awesome | | 1 | Amazing | | 1 | Good Morning | +--------+--------------+
CASE WHEN দিয়ে গুননা সীমাবদ্ধ
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 | +--------+-----------------+
ব্যাখ্যা
COUNT(*)— গ্রুপের মোট রো সংখ্যা।CASE WHEN COUNT(*) < 4 THEN COUNT(*) ELSE 'Greater Than 4' END— ৪ এর কম হলে সংখ্যা, ৪ বা বেশি হলে টেক্সট দেখায়।- ফলাফল কলামের টাইপ মিক্সড (INT + VARCHAR) হয়, অ্যাপ্লিকেশন লেভেলে হ্যান্ডল করতে হয়।
বিকল্প: LEAST() ফাংশন (শুধু সংখ্যা চাইলে)
SELECT UserId, LEAST(COUNT(*), 4) AS CappedCount FROM DemoTable GROUP BY UserId;
এটি ৪ এর বেশি হলে ৪ দেখাবে (ক্যাপ করা মাত্রা)।