คำอธิบาย
ใช้ ORDER BY DESC เรียงจากมากไปน้อย แล้วใช้ LIMIT 1 OFFSET N-1 เพื่อข้าม N-1 ค่าแรก และเอาค่าต่อไป (ค่าอันดับ N)
ขั้นตอนการสร้างตารางและข้อมูลตัวอย่าง
mysql> create table DemoTable (
Value int );
Query OK, 0 rows affected (0.49 sec)
การเพิ่มข้อมูล
mysql> insert into DemoTable values(100); Query OK, 1 row affected (0.10 sec) mysql> insert into DemoTable values(140); Query OK, 1 row affected (0.14 sec) mysql> insert into DemoTable values(90); Query OK, 1 row affected (0.08 sec) mysql> insert into DemoTable values(80); Query OK, 1 row affected (0.09 sec) mysql> insert into DemoTable values(89); Query OK, 1 row affected (0.10 sec) mysql> insert into DemoTable values(98); Query OK, 1 row affected (0.09 sec) mysql> insert into DemoTable values(58); Query OK, 1 row affected (0.10 sec)
แสดงข้อมูลทั้งหมด
mysql> select * from DemoTable;
ผลลัพธ์:
+-------+ | Value | +-------+ | 100 | | 140 | | 90 | | 80 | | 89 | | 98 | | 58 | +-------+ 7 rows in set (0.00 sec)
คิวรี่หาค่าสูงสุดอันดับ 4 (ข้าม 3 ค่าแรก)
mysql> select Value from DemoTable order by Value desc limit 1 offset 3;
ผลลัพธ์
+-------+ | Value | +-------+ | 90 | +-------+ 1 row in set (0.00 sec)
คำอธิบาย
- ORDER BY Value DESC: เรียง 140, 100, 98, 90, 89, 80, 58
- OFFSET 3: ข้าม 3 ค่าแรก (140, 100, 98)
- LIMIT 1: เอา 1 ค่าถัดไป (90) = ค่าสูงสุดอันดับ 4
สูตรทั่วไป
ค่าสูงสุดอันดับ N: LIMIT 1 OFFSET N-1
- อันดับ 1 (MAX): LIMIT 1 OFFSET 0 (หรือ LIMIT 1)
- อันดับ 2: LIMIT 1 OFFSET 1
- อันดับ 3: LIMIT 1 OFFSET 2
หมายเหตุ
หากมีค่าซ้ำ (Duplicate) จะนับเป็นแถวแยกกัน หากต้องการนับค่าที่ไม่ซ้ำ ให้ใช้ DISTINCT ใน Subquery ก่อน