কম্পিউটার টিউটোরিয়াল

MySQL-এ GROUP BY দিয়ে গুননা সীমাবদ্ধ করা (CASE WHEN)


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;

এটি ৪ এর বেশি হলে ৪ দেখাবে (ক্যাপ করা মাত্রা)।

  1. Java JDBC-এ MySQL COUNT কোয়েরির রিটার্ন টাইপ কী?

  2. MySQL GROUP BY এবং HAVING ব্যবহার করে নন-ডুপ্লিকেট ID 가진 রেকর্ড প্রদর্শন করা

  3. MySQL কোয়েরি নাম দিয়ে গ্রুপ বাই করে কাউন্ট নতুন কলামে দেখানো

  4. Python দিয়ে MySQL-এ COUNT() ও SUM() ফাংশন ব্যবহার করা