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

MySQL-এ CASE WHEN দিয়ে শর্তভিত্তিক কাউন্ট করা (Conditional Aggregation)

একই কোয়েরিতে একাধিক শর্ত অনুযায়ী কাউন্ট করতে SUM(CASE WHEN ... THEN 1 ELSE 0 END) প্যাটার্ন ব্যবহার করা হয়। এটাকে Conditional Aggregation বলা হয়।

টেবিল ও ডেটা তৈরি

mysql> CREATE TABLE DemoTable1910 (
    FirstName VARCHAR(20),
    Marks INT
);

mysql> INSERT INTO DemoTable1910 VALUES
    ('Chris', 45), ('David', 85), ('Chris', 55), ('Chris', 98), ('David', 98);

ডেটা যাচাই

mysql> SELECT * FROM DemoTable1910;
+-----------+-------+
| FirstName | Marks |
+-----------+-------+
| Chris     |    45 |
| David     |    85 |
| Chris     |    55 |
| Chris     |    98 |
| David     |    98 |
+-----------+-------+

Conditional Aggregation কোয়েরি

mysql> SELECT FirstName,
    SUM(CASE WHEN Marks = 45 THEN 1 ELSE 0 END) AS cnt_45,
    SUM(CASE WHEN Marks = 98 THEN 1 ELSE 0 END) AS cnt_98
    FROM DemoTable1910
    GROUP BY FirstName;

আউটপুট:

+-----------+--------+--------+
| FirstName | cnt_45 | cnt_98 |
+-----------+--------+--------+
| Chris     |      1 |      1 |
| David     |      0 |      1 |
+-----------+--------+--------+

কেন COUNT() না ব্যবহার করে SUM()?

  • COUNT(expr) NULL নয় এমন expr গুনে।
  • CASE WHEN ... THEN 1 ELSE NULL END লিখলে COUNT()ও কাজ করত, কিন্তু SUM(CASE ... THEN 1 ELSE 0 END) সবচেয়ে স্পষ্ট ও পোর্টেবল।

MySQL 8.0+ এ FILTER ক্লজ (বিকল্প)

SELECT FirstName,
    COUNT(*) FILTER (WHERE Marks = 45) AS cnt_45,
    COUNT(*) FILTER (WHERE Marks = 98) AS cnt_98
FROM DemoTable1910
GROUP BY FirstName;

নোট: MySQL 8.0 এ FILTER ক্লজ এখনও সমর্থিত নয়; PostgreSQL/SQL Server-এ আছে। MySQL-এ SUM(CASE...) স্ট্র্যান্ডার্ড।

ব্যবহারিক টিপস

  • শর্তগুলো মিউচুয়ালি এক্সক্লूसিভ হলে SUM(CASE ...) দ্রুত।
  • ইন্ডেক্স (FirstName, Marks) থাকলে গ্রুপিং ও ফিল্টারিং দ্রুত হবে।
  1. MySQL-এ CASE WHEN column1 IS NULL THEN NULL ELSE column2 END ব্যবহার

  2. MySQL-এ SELECT স্টেটমেন্টের ভেতরে CASE স্টেটমেন্ট ব্যবহার

  3. MySQL CASE স্টেটমেন্ট WITH ক্লজের সাথে বাস্তবায়ন

  4. MySQL-এ CASE WHEN-এর বিকল্প হিসেবে IF() ফাংশন ব্যবহার করুন