【业务功能篇26】 ROW_NUMBER() 排名函数 给表单数据增加序列号

文章介绍了在业务月报报表制作中,如何利用SQL的ROW_NUMBER(),RANK(),和DENSE_RANK()函数为Top问题单添加序列号。ROW_NUMBER()为每个记录提供唯一序号,RANK()在遇到相同值时跳过序号,而DENSE_RANK()在相同值后保持序号连续。
摘要由CSDN通过智能技术生成

业务场景: 当业务在进行月报报表制作时,会有些模块是需要填充当前月的top问题单,那么这些问题单,在第一列就要给标记序列号从1开始的序号,所以这个序号是根据业务选择的问题单后,在根据当前问题单记录进行的序列号填充,比如有3条 那么就是1,2,3,如果业务要换问题单,那么进行替换,但是对应的这个序列依旧是从1开始排序的

所以这种情况下,序号和问题单是没有关联的,那么如何去给这一部分展示的top问题单增加序列号呢?  可以使用 row_number()函数

ROW_NUMBER() 

直接在结果记录添加顺序排序序号

根据排序依据列的值进行连续的顺序排序

SELECT
	ROW_NUMBER () over ( ORDER BY date ) rowNum,
	no No,
	status Status,
	date_format( date, '%Y-%m-%d %H:%i:%s' ) Date
	
FROM
	problem_f

 那么rowNum列就是对应的序号列了 


RANK()  

另外还有:根据排序依据列的值进行连续的顺序排序,但遇到值相同则序号相同

SELECT
	rank() over ( ORDER BY date ) rowNum,
	no No,
	status Status,
	date_format( date, '%Y-%m-%d %H:%i:%s' ) Date
	
FROM
	problem_f

可以看到,前面7条 根据日期字段排序,日期相同,序号都为1 ,到了第8条,时间不一样,那么序号就为8 ,会跳过2,3,4...序号 直接来到8   


DENSE_RANK() 

根据排序依据列的值进行连续的顺序排序,遇到值相同则序号相同,后续的序号会连续

SELECT
	DENSE_RANK()  over ( ORDER BY date ) rowNum,
	no No,
	status Status,
	date_format( date, '%Y-%m-%d %H:%i:%s' ) Date
	
FROM
    problem_f

 观察,第8个序号,接着是2,而不是8 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值