เพื่อค้นหาค่าที่สูงสุดเป็นอันดับที่ N ใน MySQL สามารถใช้คำสั่ง LIMIT ร่วมกับ OFFSET ได้ โดย syntax ดังนี้:
SELECT DISTINCT(yourColumnName) FROM yourTableName ORDER BY yourColumnName DESC LIMIT (N-1), 1;
โดยที่ (N-1) คือค่า offset (ข้าม N-1 แถวแรก) และ 1 คือจำนวนแถวที่ต้องการ (แค่ 1 แถว)
ตัวอย่างการใช้งาน
1. สร้างตารางและเพิ่มข้อมูล
mysql> create table DemoTable1594 ( Marks int ); Query OK, 0 rows affected (0.49 sec) mysql> insert into DemoTable1594 values(76); Query OK, 1 row affected (0.15 sec) mysql> insert into DemoTable1594 values(95); Query OK, 1 row affected (0.16 sec) mysql> insert into DemoTable1594 values(56); Query OK, 1 row affected (0.13 sec) mysql> insert into DemoTable1594 values(96); Query OK, 1 row affected (0.16 sec) mysql> insert into DemoTable1594 values(89); Query OK, 1 row affected (0.19 sec)
ข้อมูลทั้งหมด:
mysql> select * from DemoTable1594;
+-------+ | Marks | +-------+ | 76 | | 95 | | 56 | | 96 | | 89 | +-------+ 5 rows in set (0.00 sec)
2. ค้นหาค่าสูงสุดอันดับที่ 3 (N=3)
ค่าที่เรียงจากมากไปน้อย: 96, 95, 89, 76, 56 → อันดับ 3 คือ 89
mysql> select distinct(Marks) from DemoTable1594 order by Marks DESC limit 2,1;
ผลลัพธ์:
+-------+ | Marks | +-------+ | 89 | +-------+ 1 row in set (0.00 sec)
สรุปหลักการ
| N (อันดับ) | OFFSET (N-1) | คำสั่ง LIMIT |
|---|---|---|
| 1 (สูงสุด) | 0 | LIMIT 0,1 หรือ LIMIT 1 |
| 2 | 1 | LIMIT 1,1 |
| 3 | 2 | LIMIT 2,1 |
| N | N-1 | LIMIT N-1,1 |
หมายเหตุ: ใช้ DISTINCT เพื่อป้องกันค่าซ้ำ หากต้องการนับค่าซ้ำด้วย ให้ลบ DISTINCT ออก