一、SQL题
1.学生成绩表,把每科最高分前三名统计出来
成绩表Score(student_no,subject_no,score)
-分组排序函数:
函数名() over(partition by 分组列 order by 排序列 desc) 重命名列
- rank() :并列时下一位空出所占的名次1,2,2,4。
- dense_rank():并列时下一位不空出所占的名次1,2,2,3。
- row_number():不需要考虑是否并列,哪怕根据条件查询出来的数值相同也会进行连续排名。
解法1:相关子查询
SELECT *
FROM Score AS s1
WHERE score in(
Select score
From Score As s2
WHERE s2.subject_no = s1.subject_no and rownum<=3
)
order by s1.subject_no,s1.score desc;
解法2:分组排序函数
SELECT *
FROM ( SELECT *,row_number() over(partition by subject_no order by score desc) rank
FROM Score
)
WHERE rank<=3;
2.选出每个人成绩的最高的前两条纪录
成绩表Score(student_no,subject_no,score)</