Oracle数据库以多列进行分组,然后组内某列进行排序
示例查询语句如下:
select t.*,row_number() over( partition by t.column1,t.clolumn2 order by t.tolumn3 ) from tablename t
OVER(PARTITION BY... ORDER BY...)直接是无法使用的,需要和其他函数配合使用
与OVER(PARTITION BY... ORDER BY...)匹配使用的函数
row_number() over()、rank() over()和dense_rank() over()等
在上面的例子里,使用ROW_NUMBER()可以对数据编号,但是有一个问题,例子中的MI_ID是不可以重复的,如果在可以重复的情况下,就有并列的情况,这样就无法取出并列的数据,只能取单一排序的数据。所以这里可以换成 rank() over()和dense_rank() 。