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

MySQL-এ GROUP BY এবং HAVING ব্যবহার করে SELECT মার্জ করা

একাধিক শর্ত পূরণ করে এমন রো বের করতে (যেমন: একই RoomId-এ ServiceId ১০, ২০, ৩০ সবই থাকতে হবে) GROUP BY সাথে HAVING ক্লজ ব্যবহার করুন।

উদাহরণ দিয়ে বুঝি

টেবিল তৈরি করুন:

mysql> CREATE TABLE MergingSelectDemo (
    -> RoomServicesId INT,
    -> RoomId INT,
    -> ServiceId INT
    -> );
Query OK, 0 rows affected (1.98 sec)

রেকর্ড ইনসার্ট করুন:

mysql> INSERT INTO MergingSelectDemo VALUES(10, 10, 10);
mysql> INSERT INTO MergingSelectDemo VALUES(20, 10, 20);
mysql> INSERT INTO MergingSelectDemo VALUES(30, 10, 30);
mysql> INSERT INTO MergingSelectDemo VALUES(50, 10, 50);
mysql> INSERT INTO MergingSelectDemo VALUES(110, 20, 20);
mysql> INSERT INTO MergingSelectDemo VALUES(120, 20, 30);

সকল রেকর্ড:

mysql> SELECT * FROM MergingSelectDemo;
+----------------+--------+-----------+
| RoomServicesId | RoomId | ServiceId |
+----------------+--------+-----------+
|             10 |     10 |        10 |
|             20 |     10 |        20 |
|             30 |     10 |        30 |
|             50 |     10 |        50 |
|            110 |     20 |        20 |
|            120 |     20 |        30 |
+----------------+--------+-----------+
6 rows in set (0.00 sec)

যে RoomId-এ ServiceId ১০, ২০, ৩০ - তিনটি সকলই আছে

mysql> SELECT RoomId 
    -> FROM MergingSelectDemo 
    -> WHERE ServiceId IN(10, 20, 30) 
    -> GROUP BY RoomId 
    -> HAVING COUNT(*) = 3;
+--------+
| RoomId |
+--------+
|     10 |
+--------+
1 row in set (0.15 sec)

ব্যাখ্যা:

  1. WHERE ServiceId IN(10,20,30) - শুধু এই তিনটি সার্ভিসের রো ফিল্টার করে
  2. GROUP BY RoomId - RoomId অনুযায়ী গ্রুপ করে
  3. HAVING COUNT(*) = 3 - যেই গ্রুপে ঠিক ৩টি রো আছে (অর্থাৎ তিনটি সার্ভিসই আছে) সেটি বেছে নেয়

RoomId=20-এ ServiceId ১০ নেই, তাই COUNT=২ হয় এবং ফিল্টার আউট হয়ে যায়।

নোট: যদি ডুপ্লিকেট সার্ভিস থাকতে পারে, তবে HAVING COUNT(DISTINCT ServiceId) = 3 ব্যবহার করুন।

  1. একাধিক ওয়ার্ড ডকুমেন্ট একসাথে মার্জ করার পদ্ধতি

  2. MySQL-এ IN() অপারেটর ব্যবহার করে একাধিক SELECT একত্রিত করে অপটিমাইজ করা

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

  4. MySQL-এ JOIN ব্যবহার করে দুটি টেবিলের রেজাল্ট মার্জ করা