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

MySQL-এ GROUP BY HAVING দিয়ে দুটি নির্দিষ্ট ID-র একই মানবाला রেকর্ড খুঁজে বের করা


GROUP BY ... HAVING COUNT(DISTINCT ...) = N প্যাটার্ন

MySQL-এ নির্দিষ্ট কিছু ID-র জন্য যেখানে একটি কলামের মান একই (duplicate) আছে, সেটি খুঁজে বের করতে GROUP BY ... HAVING ব্যবহার করা হয়।

টেবিল ও ডেটা

mysql> CREATE TABLE DemoTable (Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, Value INT);
mysql> INSERT INTO DemoTable(Value) VALUES(600), (600), (800), (800);

সব রেকর্ড

+----+-------+
| Id | Value |
+----+-------+
| 1  | 600   |
| 2  | 600   |
| 3  | 800   |
| 4  | 800   |
+----+-------+

কোয়েরি: ID 1 ও 2-র জন্য একই Value খুঁজা

mysql> SELECT Value FROM DemoTable tbl 
WHERE Id IN(1,2) 
GROUP BY Value 
HAVING COUNT(DISTINCT Id) = 2;
+-------+
| Value |
+-------+
| 600   |
+-------+

ব্যাখ্যা

  • WHERE Id IN(1,2) — শুধু ID ১ ও ২ বিবেচনা।
  • GROUP BY Value — Value অনুযায়ী গ্রুপ।
  • HAVING COUNT(DISTINCT Id) = 2 — সেই গ্রুপে ২টি ভিন্ন ID থাকলে (অর্থাৎ দুটি ID-র Value একই)।

ব্যবহার ক্ষেত্র

এই প্যাটার্ন "একই মান যেগুলো নির্দিষ্ট N টি রোতে আছে" খুঁজতে ব্যবহৃত হয় (Relational Division)।

  1. MySQL কোয়েরি কলামে n-তম সর্বোচ্চ মান বের করতে মানগুলো স্কিপ করে

  2. MySQL-এ একটি কোয়েরি দিয়ে দুটি টেবিল থেকে ডেটা নির্বাচন করা

  3. MySQL-এ UNION ALL এবং INSERT INTO SELECT ব্যবহার করে একক কোয়েরিতে দুটি টেবিলে ডেটা ইনসার্ট করুন

  4. MySQL-এ SELECT কুয়েরি দিয়ে INSERT করা (INSERT ... SELECT)