1、over partition by 按班级维度,取每个班第一名
select *
from (select t.id,
t.class,
t.sroce,
rank() over(partition by t.class order by t.sroce desc) n
from school t)
where n = 1;
2、扩展
row_number() over(partition by ... order by ...):返回分组排序后的顺序 rank() over(partition by ... order by ...):返回分组排序后的排名(并列第一名的情况下返回:第一名,第一名,第三名) dense_rank() over(partition by ... order by ...):返回分组排序后的排名(并列第一名的情况下返回:第一名,第一名,第二名) count(A) over(partition by ... order by ...):返回分组排序后的总数。 max(A) over(partition by ... order by ...):返回分组排序后的最大值。 min(A) over(partition by ... order by ...):返回分组排序后的最小值。 avg(A) over(partition by ... order by ...):返回分组排序后的平均值。 sum(A) over(partition by ... order by ...):返回分组排序后的累加求和。 lag(A,1) over(partition by ... order by ...):取出上一列的A的值放到本列中。 lead(A,1) over(partition by ... order by ...):取出下一列的A的值放到本列中。 ratio_to_report(A) over(partition by B) 返回分组后的A在其分区B内的占比,A就是分子,B分的组就是分母
3、