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

MySQL-এ GROUP BY ক্লজে সাবকোয়েরি ব্যবহার করে প্রতিটি গ্রুপের প্রথম রো নির্বাচন করুন

MySQL-এ GROUP BY দিয়ে গ্রুপ করার সময় প্রতিটি গ্রুপ থেকে কোন রো নির্বাচিত হবে তা নিয়ন্ত্রণ করতে সাবকোয়েরি ব্যবহার করা হয়। উদাহরণস্বরূপ, প্রতিটি মার্কস গ্রুপ থেকে ন্যূনতম StudentId वाला রো বের করা।

উদাহরণ

১. টেবিল তৈরি করুন

mysql> CREATE TABLE DemoTable1572 (
    -> StudentId INT,
    -> StudentMarks INT,
    -> StudentName VARCHAR(20)
    -> );

২. ডেটা ইনসার্ট করুন (৭৯ মার্কস দুজন)

mysql> INSERT INTO DemoTable1572 VALUES(1, 79, 'Sam');
mysql> INSERT INTO DemoTable1572 VALUES(2, 89, 'Chris');
mysql> INSERT INTO DemoTable1572 VALUES(3, 98, 'David');
mysql> INSERT INTO DemoTable1572 VALUES(4, 79, 'Bob');  -- একই মার্কস ৭৯

৩. সব রেকর্ড দেখুন

mysql> SELECT * FROM DemoTable1572;

আউটপুট:

+-----------+--------------+-------------+
| StudentId | StudentMarks | StudentName |
+-----------+--------------+-------------+
| 1         | 79           | Sam         |
| 2         | 89           | Chris       |
| 3         | 98           | David       |
| 4         | 79           | Bob         |
+-----------+--------------+-------------+

৪. প্রতিটি মার্কস গ্রুপ থেকে ন্যূনতম StudentId রো নির্বাচন করুন

mysql> SELECT * FROM DemoTable1572
    -> WHERE StudentId IN (
    ->     SELECT MIN(StudentId) FROM DemoTable1572 GROUP BY StudentMarks
    -> );

৫. ফলাফল

+-----------+--------------+-------------+
| StudentId | StudentMarks | StudentName |
+-----------+--------------+-------------+
| 1         | 79           | Sam         |
| 2         | 89           | Chris       |
| 3         | 98           | David       |
+-----------+--------------+-------------+

ব্যাখ্যা: মার্কস ৭৯-এর দুজন আছে (Id 1 এবং 4)। MIN(StudentId) দিয়ে ১ বের হয়েছে, তাই Sam নির্বাচিত হয়েছে। Bob (Id 4) বাদ পড়েছে।

আধুনিক বিকল্প (MySQL 8.0+ Window Function):

SELECT * FROM (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY StudentMarks ORDER BY StudentId) AS rn
    FROM DemoTable1572
) t WHERE rn = 1;

এটি আরও পঠনযোগ্য এবং ফ্লেক্সিবল (যেকোনো অর্ডারিংয়ের প্রথম রো পাওয়া যায়)।

  1. MySQL-এ আইটেমের অর্ডার পরিবর্তন করা

  2. MySQL-এ LIMIT OFFSET দিয়ে রো বাদ দিয়ে (Skip) রেকর্ড বের করা

  3. MySQL-এ GROUP BY ও ORDER BY FIELD একসাথে ব্যবহার করে কাস্টম সর্টিং

  4. MySQL-এ গ্রুপ করা ফিল্ডের মাধ্যমে ORDER BY করার পদ্ধতি