通过row_number()over (patition by X)函数来替代group by函数的作用呈现

比如说,你不想看到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 (patition 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吧,数据库开发!

发布了67 篇原创文章 · 获赞 2 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/annderlee/article/details/91044059