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

ค้นหาค่าที่สูงสุดเป็นอันดับที่ N (Nth Highest) ใน MySQL

เพื่อค้นหาค่าที่สูงสุดเป็นอันดับที่ 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 (สูงสุด)0LIMIT 0,1 หรือ LIMIT 1
21LIMIT 1,1
32LIMIT 2,1
NN-1LIMIT N-1,1

หมายเหตุ: ใช้ DISTINCT เพื่อป้องกันค่าซ้ำ หากต้องการนับค่าซ้ำด้วย ให้ลบ DISTINCT ออก