如何查找第N高的数据?
【非原创,记录】
课程表:找出语文成绩第二高的学生,无结果返回null
| 学号 | 课程 | 成绩 |
| 1 | 语文 | 90 |
| 1 | 数学 | 86 |
| 2 | 语文 | 77 |
| 2 | 数学 | 67 |
| 3 | 数学 | 100 |
思路:
1. 嵌套查询,第二高<第一高,成绩去重distinct
select max(distinct 成绩)
from 课程表
where 课程=‘语文’ and 成绩 < ( select max(distinct 成绩)from 课程表 where 课程=‘语文’)
2. limit + offset,ifnull(a,b)如果a不是null,返回a,如果a是null,返回b
select ifnull(
(select distinct 成绩 from 课程表 where 课程=‘语文’ order by 成绩 desc limit 1 offset 1)
, null)
as '语文课第二名成绩’
注意:
limit offset 后只能跟正整数,单一变量M —— (意味着0、负数、小数都不行,且不能用表达式M-1)
有变量表达式时,M-1可以设置成新的变量N代替,declare N int;set N = M-1