对于mysql查询第N高数据问题,都有着类似的解法
题目
表stu结构如下,现在要查询第二高的成绩,如果查不到则显示null
+-------------+------+
| Column Name | Type |
+-------------+------+
| id | int |
| score | int |
+-------------+------+
示例数据和输出结果
输入:
+----+-------+
| id | score |
+----+-------+
| 1 | 100 |
| 2 | 200 |
| 3 | 300 |
+----+-------+
输出:
+-----------+
| scorerank |
+-----------+
| 200 |
+-----------+
输入:
+----+-------+
| id | score |
+----+-------+
| 1 | 100 |
+----+-------+
输出:
+-----------+
| scorerank |
+-----------+
| null |
+-----------+
查询语句
SELECT IFNULL(
(SELECT DISTINCT salary FROM Employee ORDER BY salary DESC LIMIT 1,1)
,NULL)
AS SecondHighestSalary
如果有类似的查询语句,可以更改以下关键字,举一反三
distinct:去重(例:只有两个数据,都是100分,则不存在第二大,这种情况要去重)
order by:排序
desc:倒序(默认从小到大,如果要从大到小就需要desc)
limit(s,n):显示 [s,s+n) 的数据
ifnull(xxx,null):如果xxx结果为空则显示null