Oracle 中 ROW_NUMBER() OVER()函数的用法
一、语法
row_number() over( partition by 分组列 order by 排序列 desc )
二、语法实现过程
即先根据分组列进行一遍分组并且排序,然后对分组内根据排序列进行排序
select id, name, classid, score, row_number() over(partition by classid order by score desc) rank from Students;
在上表中CLASSID为分组列排序,排完序后在根据成绩做组内排序并且将结果赋值给RANK;
三、注意事项
1.parttion by 是 Oracle 中分析性函数的一部分,用于给结果集进行分区,它和聚合函数 group by不同的地方在于它只是将原始数据进行名次排列,能够返回一个分组中的多条记录(记录数不变),而 group by是对原始数据进行聚合统计,一般只有一条反映统计值的结果(每组返回一条)。
2.over() 必须有 ORDER BY 语句
3.分组内从 1开始排序
4.over() 中的排序字段为空,会被排到第一