比如说,你不想看到group by函数,同时也为了SQL语句的美观,整体的一致性,不想有个拖后尾的词缀等等多种因素,那么,row_number()over就能很好地站了出来;
原例SQL:
select a.user_id
,max(a.number)
,max(a.code)
,max(a.cust_id)
,max(a.address)
,max(a.name)
from t_online_custom
where 3=3
group by a.number,a.code
order by a.code desc,a.name desc;
就可以通过row_number()over (patition by X)函数改成如下语句:
select a.user_id
,a.number,
,a.code
,a.cust_id
,a.address
,a.name
,row_number()over (partition by a.number,a.code
order by a.code desc,a.name desc) rnk
from t_online_custom
where 3=3;
此外,还有一点主意的,去重后被过滤的是 a.code desc,a.name desc ,也就是排序之后以降序的排法排在第一位之后,排名2以后的数据,这一些自动过滤了
你可以发现,原本一些在之前group by语句中出现查询项的列项,都要通过函数(包括但不仅限于max/sum/count/min等等)而带出,但是在row_number()over (patition by X)语句中就不必了,多么神奇,爱上TA吧,数据库开发!