IF() ও GROUP BY দিয়ে কন্ডিশনাল গ্রুপিং
একাধিক কলামের কম্বিনেশন অনুযায়ী গ্রুপিং করতে GROUP BY col1, col2 ব্যবহার করুন। এখানে IF() দিয়ে নির্দিষ্ট প্রোডাক্টের জন্য ফ্ল্যাগ তৈরি করা হয়েছে।
সিনট্যাক্স
SELECT CustomerId, IF(ProductName = 'Product-2', 1, 0) AS is_product_2 FROM yourTable GROUP BY ProductName, CustomerId;
উদাহরণ
টেবিল তৈরি
mysql> create table MultipleGroupByDemo (
-> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> CustomerId int,
-> ProductName varchar(100)
-> );
Query OK, 0 rows affected (0.59 sec)
ডেটা ইনসার্ট
mysql> insert into MultipleGroupByDemo(CustomerId,ProductName) values(1000,'Product-1'); Query OK, 1 row affected (0.20 sec) mysql> insert into MultipleGroupByDemo(CustomerId,ProductName) values(1001,'Product-2'); Query OK, 1 row affected (0.18 sec) mysql> insert into MultipleGroupByDemo(CustomerId,ProductName) values(1001,'Product-2'); Query OK, 1 row affected (0.16 sec) mysql> insert into MultipleGroupByDemo(CustomerId,ProductName) values(1001,'Product-2'); Query OK, 1 row affected (0.12 sec) mysql> insert into MultipleGroupByDemo(CustomerId,ProductName) values(1002,'Product-3'); Query OK, 1 row affected (0.09 sec) mysql> insert into MultipleGroupByDemo(CustomerId,ProductName) values(1002,'Product-3'); Query OK, 1 row affected (0.15 sec) mysql> insert into MultipleGroupByDemo(CustomerId,ProductName) values(1003,'Product-4'); Query OK, 1 row affected (0.16 sec)
সকল রেকর্ড
mysql> SELECT * FROM MultipleGroupByDemo;
আউটপুট
+----+------------+-------------+ | Id | CustomerId | ProductName | +----+------------+-------------+ | 1 | 1000 | Product-1 | | 2 | 1001 | Product-2 | | 3 | 1001 | Product-2 | | 4 | 1001 | Product-2 | | 5 | 1002 | Product-3 | | 6 | 1002 | Product-3 | | 7 | 1003 | Product-4 | +----+------------+-------------+
GROUP BY ProductName, CustomerId
mysql> SELECT CustomerId, IF(ProductName = 'Product-2', 1, 0) FROM MultipleGroupByDemo GROUP BY ProductName, CustomerId;
আউটপুট
+------------+---------------------------------------+ | CustomerId | IF(ProductName = 'Product-2', 1, 0) | +------------+---------------------------------------+ | 1000 | 0 | | 1001 | 1 | | 1002 | 0 | | 1003 | 0 | +------------+---------------------------------------+
বিকল্প: MAX(IF()) দিয়ে কাস্টমার অনুযায়ী ফ্ল্যাগ
mysql> SELECT CustomerId, MAX(IF(ProductName = 'Product-2', 1, 0)) FROM MultipleGroupByDemo GROUP BY CustomerId;
আউটপুট
+------------+-----------------------------------------+ | CustomerId | MAX(IF(ProductName = 'Product-2', 1, 0)) | +------------+-----------------------------------------+ | 1000 | 0 | | 1001 | 1 | | 1002 | 0 | | 1003 | 0 | +------------+-----------------------------------------+
ব্যাখ্যা: প্রথম কোয়েরি (ProductName, CustomerId) পেয়ার অনুযায়ী গ্রুপ করে। দ্বিতীয় কোয়েরি কাস্টমার অনুযায়ী গ্রুপ করে এবং সে কাস্টমার 'Product-2' কিনেছে কিনা চেক করে (MAX=১ মানে হ্যাঁ)।