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

หาค่า Nth Highest (อันดับที่ N จากสูงสุด) ของคอลัมน์ใน MySQL


ใช้ ORDER BY DESC ร่วมกับ LIMIT เพื่อหาค่าอันดับที่ N จากสูงสุด

รูปแบบไวยากรณ์

  • อันดับที่ 2: LIMIT 1,1 (ข้าม 1 แถว แล้ว取 1 แถว)
  • อันดับที่ 4: LIMIT 3,1 (ข้าม 3 แถว แล้ว取 1 แถว)
  • อันดับที่ 1: LIMIT 1 (หรือ LIMIT 0,1)

หลักการ: LIMIT offset, count โดย offset = N-1

ตัวอย่างการใช้งาน

สร้างตารางเงินเดือน:

mysql> CREATE TABLE NthSalaryDemo ( Id INT NOT NULL AUTO_INCREMENT, Name VARCHAR(10), Salary INT, PRIMARY KEY(Id) ); Query OK, 0 rows affected (1.03 sec)

เพิ่มข้อมูล:

mysql> INSERT INTO NthSalaryDemo(Name,Salary) VALUES('Larry',5700); Query OK, 1 row affected (0.41 sec)
mysql> INSERT INTO NthSalaryDemo(Name,Salary) VALUES('Sam',6000); Query OK, 1 row affected (0.16 sec)
mysql> INSERT INTO NthSalaryDemo(Name,Salary) VALUES('Mike',5800); Query OK, 1 row affected (0.16 sec)
mysql> INSERT INTO NthSalaryDemo(Name,Salary) VALUES('Carol',4500); Query OK, 1 row affected (0.17 sec)
mysql> INSERT INTO NthSalaryDemo(Name,Salary) VALUES('Bob',4900); Query OK, 1 row affected (0.20 sec)
mysql> INSERT INTO NthSalaryDemo(Name,Salary) VALUES('David',5400); Query OK, 1 row affected (0.27 sec)
mysql> INSERT INTO NthSalaryDemo(Name,Salary) VALUES('Maxwell',5300); Query OK, 1 row affected (0.21 sec)
mysql> INSERT INTO NthSalaryDemo(Name,Salary) VALUES('James',4000); Query OK, 1 row affected (0.19 sec)
mysql> INSERT INTO NthSalaryDemo(Name,Salary) VALUES('Robert',4600); Query OK, 1 row affected (0.19 sec)

แสดงข้อมูล:

+----+---------+--------+ | Id | Name    | Salary | +----+---------+--------+ | 1  | Larry   | 5700   | | 2  | Sam     | 6000   | | 3  | Mike    | 5800   | | 4  | Carol   | 4500   | | 5  | Bob     | 4900   | | 6  | David   | 5400   | | 7  | Maxwell | 5300   | | 8  | James   | 4000   | | 9  | Robert  | 4600   | +----+---------+--------+ 9 rows in set (0.00 sec)

กรณีที่ 1: อันดับที่ 4 (LIMIT 3,1)

mysql> SELECT * FROM NthSalaryDemo ORDER BY Salary DESC LIMIT 3,1;
+----+-------+--------+ | Id | Name  | Salary | +----+-------+--------+ | 6  | David | 5400   | +----+-------+--------+

กรณีที่ 2: อันดับที่ 2 (LIMIT 1,1)

mysql> SELECT * FROM NthSalaryDemo ORDER BY Salary DESC LIMIT 1,1;
+----+------+--------+ | Id | Name | Salary | +----+------+--------+ | 3  | Mike | 5800   | +----+------+--------+

กรณีที่ 3: อันดับที่ 1 (LIMIT 1)

mysql> SELECT * FROM NthSalaryDemo ORDER BY Salary DESC LIMIT 1;
+----+------+--------+ | Id | Name | Salary | +----+------+--------+ | 2  | Sam  | 6000   | +----+------+--------+

กรณีที่ 4: อันดับที่ 8 (LIMIT 7,1)

mysql> SELECT * FROM NthSalaryDemo ORDER BY Salary DESC LIMIT 7,1;
+----+-------+--------+ | Id | Name  | Salary | +----+-------+--------+ | 4  | Carol | 4500   | +----+-------+--------+