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

MySQL-এ GROUP BY-র ভেতরে ORDER BY ব্যবহার করা যায় কি? (MAX() ফাংশন বিকল্প)

MySQL-এ GROUP BY-র ভেতরে সরাসরি ORDER BY ব্যবহার করা যায় না। বরং MAX() বা MIN() অগ্রেগেট ফাংশন ব্যবহার করে একই ফলাফল পাওয়া যায়।

সিনট্যাক্স (MAX() ব্যবহার)

SELECT yourNameColumnName, MAX(yourRankColumnName) 
FROM yourTableName 
GROUP BY yourNameColumnName;

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

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

mysql> CREATE TABLE MaxDemo (
    -> UserId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> UserName VARCHAR(20),
    -> UserRank INT
    -> );
Query OK, 0 rows affected (0.77 sec)

রেকর্ড ইনসার্ট করুন (Sam-এর দুটি র‍্যাঙ্ক):

mysql> INSERT INTO MaxDemo(UserName, UserRank) VALUES('Larry', 2);
mysql> INSERT INTO MaxDemo(UserName, UserRank) VALUES('Sam', 1);
mysql> INSERT INTO MaxDemo(UserName, UserRank) VALUES('Sam', 2);

সকল রেকর্ড:

mysql> SELECT * FROM MaxDemo;
+--------+----------+----------+
| UserId | UserName | UserRank |
+--------+----------+----------+
|      1 | Larry    |        2 |
|      2 | Sam      |        1 |
|      3 | Sam      |        2 |
+--------+----------+----------+
3 rows in set (0.00 sec)

প্রতিটি UserName-এর সর্বোচ্চ UserRank বের করুন

mysql> SELECT UserName, MAX(UserRank) FROM MaxDemo GROUP BY UserName;
+----------+---------------+
| UserName | MAX(UserRank) |
+----------+---------------+
| Larry    |             2 |
| Sam      |             2 |
+----------+---------------+
2 rows in set (0.00 sec)

ব্যাখ্যা: Sam-র দুটি র‍্যাঙ্ক (১ এবং ২) থাকায় MAX(UserRank) সে ২ রিটার্ন করেছে।

আরও জটিল কেস: নির্দিষ্ট শর্ত অনুযায়ী রো বেছে নেওয়া

যদি গ্রুপের মধ্যে নির্দিষ্ট শর্তের প্রথম/শেষ রো দরকার হয় (যেমন: সর্বোচ্চ র‍্যাঙ্কের রোয়ের অন্য কলাম), তবে:

MySQL 8.0+ (ROW_NUMBER() উইন্ডো ফাংশন)

WITH Ranked AS (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY UserName ORDER BY UserRank DESC) AS rn
    FROM MaxDemo
)
SELECT UserName, UserRank FROM Ranked WHERE rn = 1;

পুরানো ভার্সন (সাবকোয়েরি/জয়ন)

SELECT m1.UserName, m1.UserRank
FROM MaxDemo m1
JOIN (
    SELECT UserName, MAX(UserRank) AS MaxRank
    FROM MaxDemo
    GROUP BY UserName
) m2 ON m1.UserName = m2.UserName AND m1.UserRank = m2.MaxRank;

সারাংশ: সিম্পল MAX/MIN-এ MAX() ব্যবহার করুন। জটিল কেসে উইন্ডো ফাংশন (MySQL 8.0+) বা সাবকোয়েরি জয়ন ব্যবহার করুন।

  1. MySQL-এ NULL মানসহ কলাম সর্ট করা

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

  3. MySQL-এ GROUP_CONCAT DISTINCT BY ID দিয়ে স্বতর্ক মান কমা-সেপারেটেড দেখানো

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