row_number() over (partition by a.accnt_currency_type, a.lv order by rownum)
如上这个函数是什么意思? (ps:order by里面的rownum是系统自带的rownum).
这个语句的row_number() 其实是取了group by a.accnt_currency_type, a.lv 内的检索后的伪列rownum顺序
最好携程按照某个字段排序会更有意义
row_number() over (partition by a.accnt_currency_type, a.lv order by a.lv)
比如:
select a,b,rownum from TEST t;
select a,b,row_number() over(order by rownum) from TEST t;
这两个sql是等价的
select a,b,rownum from TEST t;
select a,b,row_number() over(order by a) from TEST t;
这俩个,第二个会更有意义
举个栗子,你就清楚了,比如一年级有10个班,每个班人数不等,有的有50个人,有的有60个人,但是这些学生信息都在同一张表里,现在要从每个班取出年纪最小的那个人。如果用GROUP BY的话,取出来的是年纪最小的10个人,但是不一定是每个班年纪最小的,这样就有问题。那我们就用ROW_NUMBER函数排序,partition by: 是指按班级排序或者其他属性排序,order by: 按年纪排序,这样下来就会按10个班级分别排序年纪最小的人,再取序号为1的人即为年纪最小的10个人.