函数() over (partition by <分组列> order by <排序列> rows between 开始行 and 结束行)


select name AS "姓名" ,class as "班级",score as "分数"
,RANK() over(partition by class order by score desc) rank_id -- rank()可并列不可连续 1,1,3,4
,DENSE_RANK() over(partition by class order by score desc) dense_rank_id-- DENSE_RANK()可并列连续 1,1,2,3
,ROW_NUMBER() over(partition by class order by score DESC) row_number_id-- ROW_NUMBER()不可并列但连续 1,2,3,4
from mark
结果:

select name AS "姓名" ,class as "班级",score as "分数"
,max(score) over(partition by class) as "最高得分"
,min(score) over(partition by class) as "最低得分"
,avg(score) over (partition by class ) as "平均分"
,sum(score) over(partition by class) as "总分"
,count(score) over (partition by class) as "score计数"
,count(1) over(partition by class) as "计数"
from mark

select name AS "姓名" ,class as "班级",score as "分数"
,ROW_NUMBER() over(order by score desc) as "行数"
,CUME_DIST() over(order by score desc) as "cume_dist"
,concat(cast(100*CUME_DIST() over(order by score desc) as DECIMAL(10,1)),'%') as "cume_dist_%"
,RANK() over(order by score desc) rank_id -- rank()可并列不可连续 1,1,3,4
,PERCENT_RANK() over(order by score desc) as "percent_rank"
,concat(cast(100*PERCENT_RANK() over(order by score desc) as DECIMAL(10,1)),'%') as "percent_rank_%"
from mark
