窗口函数的应用
dense_rank()
问题描述:请按照不同班级不同学科为每位同学成绩生成排名情况
select
NAME
,AGE
,CLASS
,GRADE
,SUBJECT
,dense_rank()over (partition by CLASS,SUBJECT order by GRADE DESC) as ID
from students
结果是ID列,成绩从高到低排列,出现并列分数时序号相同,后续排序继续顺序编号
生成结果如下:
rank()
问题描述:请按照不同学科统计学生成绩排名
select
NAME
,AGE
,CLASS
,GRADE
,SUBJECT
,rank()over (partition by SUBJECT order by GRADE DESC) as ID
from students
每门课程的成绩排序如下,当出现相同分数时,排名相同,下一名跳过原来位置继续排序
生成结果如下
sum()
问题描述:请统计每位学生的成绩总分
select
NAME
,CLASS
,GRADE
,SUBJECT
,sum(GRADE) over(partition by name order by CLASS) all_score
from students
order by CLASS
会在每条数据的后面统计出该位学生的累计成绩总分
生成结果如下:
avg()
问题描述:请计算每个班级不同学科的平均分
select
NAME
,CLASS
,GRADE
,SUBJECT
,avg(GRADE) over(partition by CLASS,SUBJECT order by CLASS) all_score
from students
order by CLASS
会在每条数据的后面统计出该班级该学科的平均成绩分数
生成结果如下: