如何查找第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

posted @ 2022-01-19 17:05  Widereye  阅读(34)  评论(0编辑  收藏  举报