একই নামের একাধিক রেকর্ড থাকলে প্রতিটি নামের জন্য সর্বোচ্চ বয়স বের করতে GROUP BY এবং এগ리게ট ফাংশন MAX() ব্যবহার করা হয়।
টেবিল ও ডেটা তৈরি
mysql> CREATE TABLE DemoTable1964 (
StudentName VARCHAR(20),
StudentAge INT
);
mysql> INSERT INTO DemoTable1964 VALUES
('Chris', 23), ('David', 34), ('Chris', 27), ('Sam', 31), ('David', 32), ('David', 37);
ডেটা যাচাই
mysql> SELECT * FROM DemoTable1964;
+-------------+------------+ | StudentName | StudentAge | +-------------+------------+ | Chris | 23 | | David | 34 | | Chris | 27 | | Sam | 31 | | David | 32 | | David | 37 | +-------------+------------+
কোয়েরি: নাম অনুযায়ী গ্রুপ করে সর্বোচ্চ বয়স
mysql> SELECT StudentName, MAX(StudentAge) AS MaxAge
FROM DemoTable1964
GROUP BY StudentName;
আউটপুট:
+-------------+--------+ | StudentName | MaxAge | +-------------+--------+ | Chris | 27 | | David | 37 | | Sam | 31 | +-------------+------------+
ব্যাখ্যা
GROUP BY StudentName— একই নামের সারিগুলো এক গ্রুপে।MAX(StudentAge)— প্রতিটি গ্রুপে সর্বোচ্চ বয়স বের করে।AS MaxAge— আউটপুট কলামের নাম।
অন্যান্য এগ리게শন একসাথে
SELECT StudentName,
MIN(StudentAge) AS MinAge,
MAX(StudentAge) AS MaxAge,
AVG(StudentAge) AS AvgAge,
COUNT(*) AS RecordCount
FROM DemoTable1964
GROUP BY StudentName;
পারফরম্যান্স টিপ
(StudentName, StudentAge)কম্পোজিট ইন্ডেক্স থাকলেMAX()খুব দ্রুত হবে (ইন্ডেক্স-অনলি স্ক্যান)।- বড় টেবিলে
WHEREক্লজ দিয়ে আগে ফিল্টার করুন, তারপর গ্রুপ।
MySQL 8.0+ এ উইন্ডো ফাংশন (সব সারি রাখতে)
SELECT StudentName, StudentAge,
MAX(StudentAge) OVER (PARTITION BY StudentName) AS MaxAgePerName
FROM DemoTable1964;
এটি গ্রুপ বাই ছাড়া প্রতিটি সারির পাশে সেই নামের সর্বোচ্চ বয়স দেখাবে।