Computer >> Máy Tính >  >> Lập trình >> MySQL

Làm thế nào để tìm giá trị cao nhất thứ n của một cột MySQL?

Để tìm giá trị cao thứ n của một cột, bạn cần sử dụng mệnh đề ORDER BY DESC với LIMIT. Nếu bạn muốn giá trị cao thứ hai của một cột, hãy sử dụng cú pháp dưới đây:

SELECT *FROM yourTableName ORDER BY DESC yourColumnName LIMIT 1,1;

Nếu bạn muốn giá trị cao thứ tư của một cột, hãy sử dụng cú pháp dưới đây:

SELECT *FROM yourTableName ORDER BY DESC yourColumnName LIMIT 3,1;

Nếu bạn muốn giá trị cao nhất đầu tiên của một cột, hãy sử dụng cú pháp dưới đây:

SELECT *FROM yourTableName ORDER BY DESC yourColumnName LIMIT 1;

Như đã thảo luận trong cú pháp trên, bạn chỉ cần thay đổi trong mệnh đề LIMIT. Để hiểu cú pháp trên, chúng ta hãy tạo một bảng. Truy vấn để tạo bảng như sau:

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)

Chèn một số bản ghi trong bảng bằng lệnh chèn. Truy vấn như sau:

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)

Hiển thị tất cả các bản ghi từ bảng bằng cách sử dụng câu lệnh select. Truy vấn như sau:

mysql> select *from NthSalaryDemo;

Sau đây là kết quả:

+----+---------+--------+
| 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)

Trường hợp 1: Đây là truy vấn để lấy giá trị cao thứ n của một cột.

Truy vấn dưới đây sẽ cung cấp giá trị cao thứ tư của cột "Lương":

mysql> select *from NthSalaryDemo order by Salary desc limit 3,1;

Sau đây là kết quả:

+----+-------+--------+
| Id | Name  | Salary |
+----+-------+--------+
|  6 | David | 5400   |
+----+-------+--------+
1 row in set (0.00 sec)

Trường hợp 2: Đây là truy vấn để nhận giá trị cao thứ hai của cột "Lương":

mysql> select *from NthSalaryDemo order by Salary desc limit 1,1;

Sau đây là kết quả:

+----+------+--------+
| Id | Name | Salary |
+----+------+--------+
|  3 | Mike | 5800   |
+----+------+--------+
1 row in set (0.00 sec)

Trường hợp 3: Đây là truy vấn để lấy giá trị cao nhất đầu tiên của một cột:

mysql> select *from NthSalaryDemo order by Salary desc limit 1;

Sau đây là kết quả:

+----+------+--------+
| Id | Name | Salary |
+----+------+--------+
|  2 | Sam  | 6000   |
+----+------+--------+
1 row in set (0.00 sec)

Trường hợp 4: Nếu bạn muốn nhận giá trị cao thứ 8 của cột "Lương", hãy sử dụng truy vấn sau:

mysql> select *from NthSalaryDemo order by Salary desc limit 7,1;

Sau đây là kết quả:

+----+-------+--------+
| Id | Name  | Salary |
+----+-------+--------+
|  4 | Carol |   4500 |
+----+-------+--------+
1 row in set (0.00 sec)