একটি কলামের nth সর্বোচ্চ মান বের করতে ORDER BY DESC সহ LIMIT ক্লজ ব্যবহার করতে হয়। যদি কলামের দ্বিতীয় সর্বোচ্চ মান চান, তবে নিচের সিনট্যাক্স ব্যবহার করুন:
SELECT *FROM yourTableName ORDER BY DESC yourColumnName LIMIT 1,1;
যদি চতুর্থ সর্বোচ্চ মান চান, তবে নিচের সিনট্যাক্স ব্যবহার করুন:
SELECT *FROM yourTableName ORDER BY DESC yourColumnName LIMIT 3,1;
যদি প্রথম সর্বোচ্চ মান চান, তবে নিচের সিনট্যাক্স ব্যবহার করুন:
SELECT *FROM yourTableName ORDER BY DESC yourColumnName LIMIT 1;
উপরের সিনট্যাক্সে শুধু LIMIT ক্লজে পরিবর্তন আনতে হয়। এটি বুঝতে একটি টেবিল তৈরি করা যাক। টেবিল তৈরির কোয়েরি:
mysql> create table NthSalaryDemo
-> (
-> Id int NOT NULL AUTO_INCREMENT,
-> Name varchar(10),
-> Salary int,
-> PRIMARY KEY(Id)
-> ); Query OK, 0 rows affected (1.03 sec)
ইনসার্ট কমান্ড দিয়ে কিছু রেকর্ড ইনসার্ট করা যাক। কোয়েরিটি হলো:
mysql> insert into NthSalaryDemo(Name,Salary) values('Larry',5700); Query OK, 1 row affected (0.41 sec) mysql> insert into NthSalaryDemo(Name,Salary) values('Sam',6000); Query OK, 1 row affected (0.16 sec) mysql> insert into NthSalaryDemo(Name,Salary) values('Mike',5800); Query OK, 1 row affected (0.16 sec) mysql> insert into NthSalaryDemo(Name,Salary) values('Carol',4500); Query OK, 1 row affected (0.17 sec) mysql> insert into NthSalaryDemo(Name,Salary) values('Bob',4900); Query OK, 1 row affected (0.20 sec) mysql> insert into NthSalaryDemo(Name,Salary) values('David',5400); Query OK, 1 row affected (0.27 sec) mysql> insert into NthSalaryDemo(Name,Salary) values('Maxwell',5300); Query OK, 1 row affected (0.21 sec) mysql> insert into NthSalaryDemo(Name,Salary) values('James',4000); Query OK, 1 row affected (0.19 sec) mysql> insert into NthSalaryDemo(Name,Salary) values('Robert',4600); Query OK, 1 row affected (0.19 sec)
সিলেক্ট স্টেটমেন্ট দিয়ে সব রেকর্ড দেখানো যাক। কোয়েরিটি হলো:
mysql> select *from NthSalaryDemo;
আউটপুট নিচে দেওয়া হলো:
+----+---------+--------+ | Id | Name | Salary | +----+---------+--------+ | 1 | Larry | 5700 | | 2 | Sam | 6000 | | 3 | Mike | 5800 | | 4 | Carol | 4500 | | 5 | Bob | 4900 | | 6 | David | 5400 | | 7 | Maxwell | 5300 | | 8 | James | 4000 | | 9 | Robert | 4600 | +----+---------+--------+ 9 rows in set (0.00 sec)
কেস ১: কলামের nth সর্বোচ্চ মান বের করার কোয়েরি নিচে দেওয়া হলো। নিচের কোয়েরি Salary কলামের চতুর্থ সর্বোচ্চ মান দেবে:
mysql> select *from NthSalaryDemo order by Salary desc limit 3,1;
আউটপুট:
+----+-------+--------+ | Id | Name | Salary | +----+-------+--------+ | 6 | David | 5400 | +----+-------+--------+ 1 row in set (0.00 sec)
কেস ২: Salary কলামের দ্বিতীয় সর্বোচ্চ মান বের করার কোয়েরি:
mysql> select *from NthSalaryDemo order by Salary desc limit 1,1;
আউটপুট:
+----+------+--------+ | Id | Name | Salary | +----+------+--------+ | 3 | Mike | 5800 | +----+------+--------+ 1 row in set (0.00 sec)
কেস ৩: কলামের প্রথম সর্বোচ্চ মান বের করার কোয়েরি:
mysql> select *from NthSalaryDemo order by Salary desc limit 1;
আউটপুট:
+----+------+--------+ | Id | Name | Salary | +----+------+--------+ | 2 | Sam | 6000 | +----+------+--------+ 1 row in set (0.00 sec)
কেস ৪: যদি Salary কলামের ৮ম সর্বোচ্চ মান চান, তবে নিচের কোয়েরি ব্যবহার করুন:
mysql> select *from NthSalaryDemo order by Salary desc limit 7,1;
আউটপুট:
+----+-------+--------+ | Id | Name | Salary | +----+-------+--------+ | 4 | Carol | 4500 | +----+-------+--------+ 1 row in set (0.00 sec)
ব্যাখ্যা: ORDER BY column DESC দিয়ে ডেসেন্ডিং অর্ডারে সাজিয়ে LIMIT offset, 1 দিয়ে nth সর্বোচ্চ মান বের করা হয়। এখানে offset = n-1। MySQL 8.0+ এ DENSE_RANK() বা ROW_NUMBER() উইন্ডো ফাংশন ব্যবহার করে ডুপ্লিকেট ভ্যালু হ্যান্ডলিং সহজ হয়।