Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

MySQL หาค่า Nth Maximum (ค่าที่ N จากมากไปน้อย) ด้วย LIMIT offset, count

ใช้ 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 ใช้ได้กับทุกชนิดข้อมูลที่เรียงลำดับได้ (ตัวเลข, วันที่, ข้อความ) เรียบง่ายและมีประสิทธิภาพดี