การหาค่า Top-N ด้วย ORDER BY LIMIT OFFSET
เรียงจากมากไปน้อย (DESC) แล้วใช้ LIMIT 1 OFFSET n หาค่าอันดับที่ n+1
ตัวอย่าง: ตาราง EmployeeSalary
mysql> create table DemoTable867(EmployeeSalary int);
Query OK, 0 rows affected (0.64 sec)
mysql> insert into DemoTable867 values(63737);
mysql> insert into DemoTable867 values(899833);
mysql> insert into DemoTable867 values(23644);
mysql> insert into DemoTable867 values(89393);
mysql> insert into DemoTable867 values(534333);
mysql> insert into DemoTable867 values(889322);
Top 1 (สูงสุด)
mysql> select distinct(EmployeeSalary) from DemoTable867
order by EmployeeSalary DESC LIMIT 1;
ผลลัพธ์: 899833
Top 2 (อันดับ 2)
mysql> select distinct(EmployeeSalary) from DemoTable867
order by EmployeeSalary DESC LIMIT 1 OFFSET 1;
ผลลัพธ์: 889322
Top 3 (อันดับ 3)
mysql> select distinct(EmployeeSalary) from DemoTable867
order by EmployeeSalary DESC LIMIT 1 OFFSET 2;
ผลลัพธ์: 534333
คำสั่งรวม: Top 3 พร้อมกัน
mysql> select distinct(EmployeeSalary) from DemoTable867
order by EmployeeSalary DESC LIMIT 3;
⚠️ หมายเหตุเกี่ยวกับ DISTINCT
DISTINCTใช้เพื่อไม่ให้นับซ้ำถ้ามีเงินเดือนเท่ากันหลายคน- ถ้าต้องการ "Top 3 คน" ไม่ใช่ "Top 3 ระดับเงินเดือน" ให้เอา DISTINCT ออก
MySQL 8.0+: ใช้ Window Function
SELECT EmployeeSalary
FROM (
SELECT EmployeeSalary,
ROW_NUMBER() OVER (ORDER BY EmployeeSalary DESC) as rn
FROM DemoTable867
) t
WHERE rn <= 3;
สรุป
ใช้ ORDER BY salary DESC LIMIT 3 หา Top 3 ใช้ LIMIT 1 OFFSET n หาอันดับที่ n+1 ใส่ DISTINCT ถ้าต้องการค่าที่ไม่ซ้ำ