通过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 (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吧,数据库开发!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值