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

MySQL: หาค่าที่สูงสุดอันดับ N (Nth Highest) ด้วย LIMIT OFFSET


คำอธิบาย

ใช้ 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)

คำอธิบาย

  1. ORDER BY Value DESC: เรียง 140, 100, 98, 90, 89, 80, 58
  2. OFFSET 3: ข้าม 3 ค่าแรก (140, 100, 98)
  3. 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 ก่อน