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

MySQL-এ একাধিক কলাম দিয়ে GROUP BY করা


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=১ মানে হ্যাঁ)।

  1. MySQL কোয়ারি: একাধিক ID দ্বারা সাজানো (ORDER BY FIELD)

  2. MySQL-এ একাধিক কলামে একাধিক COUNT করার পদ্ধতি

  3. MySQL-এ একক কোয়ারিতে একাধিক কলামের টাইপ পরিবর্তন করা

  4. MySQL-এ GREATEST() দিয়ে একাধিক কলাম একসাথে সর্ট করা