SQL面试经典问题-开窗函数
案例:按课程号分组取成绩最大值所在行的数据
select
学号,
课程号,
max(成绩) as 最高分,
from a
group by 课程号
案例:按课程号分组取成绩最小值所在行的数据(意思是每个课程最小值的学生信息都要出来)
关联子查询
select * from score a
where 成绩=(
select min(成绩) from score b
where b.课程号=a.课程号
)
查询各科成绩前两名的记录(topN),一定要嵌套一层,不能直接取,因为where比select先执行
select *
from (select
*,
dense_rank() over (partition by ID order by score desc) as 排名
from
score)t
where t.排名<=2
查找单科成绩高于该科目平均成绩的学生名单
第一种解法
select 姓名
from
成绩表
left join
(select 科目,
avg(score) as 平均成绩
from 成绩表
group by 科目)t
where 成绩表.成绩>t. 平均成绩
第二种解法
select * from (
select *,
avg(成绩) over (
PARTITION by 课程号) as 平均成绩
from score)as a
where 成绩>平均成绩