ใช้ ORDER BY ... DESC ร่วมกับ LIMIT offset, count เพื่อหาค่าที่ N จากมากไปน้อย (Nth Maximum) ได้อย่างง่ายดาย
ตัวอย่างการใช้งาน
1. สร้างตาราง
mysql> CREATE TABLE DemoTable (
Value INT
);
Query OK, 0 rows affected (0.59 sec)
2. เพิ่มข้อมูลทดสอบ
mysql> INSERT INTO DemoTable VALUES(40); Query OK, 1 row affected (0.26 sec) mysql> INSERT INTO DemoTable VALUES(60); Query OK, 1 row affected (0.09 sec) mysql> INSERT INTO DemoTable VALUES(45); Query OK, 1 row affected (0.11 sec) mysql> INSERT INTO DemoTable VALUES(85); Query OK, 1 row affected (0.12 sec) mysql> INSERT INTO DemoTable VALUES(78); Query OK, 1 row affected (0.10 sec)
3. ข้อมูลก่อนเรียงลำดับ
mysql> SELECT * FROM DemoTable; +-------+ | Value | +-------+ | 40 | | 60 | | 45 | | 85 | | 78 | +-------+
4. หาค่าที่ 3 จากมากไปน้อย (3rd Maximum = N=3)
mysql> SELECT * FROM DemoTable ORDER BY Value DESC LIMIT 2, 1;
คำอธิบาย LIMIT offset, count:
OFFSET = N - 1(ข้าม N-1 แถวแรก)COUNT = 1(ดึงแค่ 1 แถว)- สำหรับ N=3 :
LIMIT 2, 1(ข้าม 2 แถวแรก คือ 85, 78 แล้วดึงแถวถัดไป)
5. ผลลัพธ์
+-------+ | Value | +-------+ | 60 | +-------+
การตรวจสอบ: เรียงลำดับทั้งหมด
mysql> SELECT * FROM DemoTable ORDER BY Value DESC; +-------+ | Value | +-------+ | 85 | -- 1st Max | 78 | -- 2nd Max | 60 | -- 3rd Max (Target) | 45 | | 40 | +-------+
กรณีมีค่าซ้ำ (Duplicates)
หากต้องการ Distinct Nth Maximum (ไม่นับค่าซ้ำ):
SELECT DISTINCT Value FROM DemoTable ORDER BY Value DESC LIMIT 2, 1;
สรุป
สูตรหา Nth Maximum: ORDER BY column DESC LIMIT N-1, 1 ใช้ได้กับทุกชนิดข้อมูลที่เรียงลำดับได้ (ตัวเลข, วันที่, ข้อความ) เรียบง่ายและมีประสิทธิภาพดี