MySQL-এ একক কোয়েরিতে একাধিক শর্তভিত্তিক গণনা (conditional count) করতে CASE এক্সপ্রেশন COUNT()-এর ভিতরে ব্যবহার করা হয়।
টেবিল তৈরি এবং ডেটা ইনসার্ট
mysql> CREATE TABLE DemoTable (
-> LastName VARCHAR(100)
-> );
Query OK, 0 rows affected (0.60 sec)
mysql> INSERT INTO DemoTable VALUES('Smith');
mysql> INSERT INTO DemoTable VALUES('Brown');
mysql> INSERT INTO DemoTable VALUES('Brown');
mysql> INSERT INTO DemoTable VALUES('Smith');
mysql> INSERT INTO DemoTable VALUES('Taylor');
mysql> INSERT INTO DemoTable VALUES('Taylor');
mysql> INSERT INTO DemoTable VALUES('Miller');
mysql> INSERT INTO DemoTable VALUES('Miller');
mysql> INSERT INTO DemoTable VALUES('Miller');
সব রেকর্ড দেখানো
mysql> SELECT * FROM DemoTable;
আউটপুট
+----------+ | LastName | +----------+ | Smith | | Brown | | Brown | | Smith | | Taylor | | Taylor | | Miller | | Miller | | Miller | +----------+ 9 rows in set (0.00 sec)
CASE WHEN দিয়ে একাধিক COUNT একসাথে
mysql> SELECT
-> COUNT(CASE WHEN LastName = 'Smith' THEN 1 END) AS TotalFrequency,
-> COUNT(CASE WHEN LastName = 'Brown' THEN 1 END) AS TotalFrequency,
-> COUNT(CASE WHEN LastName = 'Taylor' THEN 1 END) AS TotalFrequency,
-> COUNT(CASE WHEN LastName = 'Miller' THEN 1 END) AS TotalFrequency
-> FROM DemoTable;
আউটপুট
+----------------+----------------+----------------+----------------+ | TotalFrequency | TotalFrequency | TotalFrequency | TotalFrequency | +----------------+----------------+----------------+----------------+ | 2 | 2 | 2 | 3 | +----------------+----------------+----------------+----------------+ 1 row in set (0.00 sec)
ব্যাখ্যা: CASE WHEN condition THEN 1 END — শর্ত পূরণ হলে ১ রিটার্ন করে, না হলে NULL রিটার্ন করে। COUNT() শুধু নন-NULL মান গণনা করে, তাই শর্ত পূরণকারী রোরা গণনা হয়।
উন্নত সিনট্যাক্স (এলিয়াস ভিন্ন রাখা):
SELECT COUNT(CASE WHEN LastName = 'Smith' THEN 1 END) AS SmithCount, COUNT(CASE WHEN LastName = 'Brown' THEN 1 END) AS BrownCount, COUNT(CASE WHEN LastName = 'Taylor' THEN 1 END) AS TaylorCount, COUNT(CASE WHEN LastName = 'Miller' THEN 1 END) AS MillerCount FROM DemoTable;
বিকল্প (MySQL 8.0+): SUM(LastName = 'Smith') — বুলিয়ান TRUE=১, FALSE=০, তাই SUM দিয়েই গণনা হয়।