Oracle 中排序函数总结
2023-12-14 18:28:11
一、rownum
rownum为最简单的序号 但是在order by之前就确定值。
select
rownum,--序号
year_name,--年份名称
month_name,--月份名称
post_code,--岗位编码
post_name,--岗位名称
testtype_code,--试验类型编码
testtype_name,--试验类型名称
cost_amt--产值
from test_2021
where
year_name = '2016年' and month_name = '12月'
order by cost_amt
二、row_number
2.1、row_number() over( order by 字段名1,字段名2,…字段名n )
先排序,再确定序号
select
row_number() over( order by cost_amt) as xuhao,--序号
year_name,--年份名称
month_name,--月份名称
post_code,--岗位编码
post_name,--岗位名称
testtype_code,--试验类型编码
testtype_name,--试验类型名称
cost_amt--产值
from
test_2021 a
where
year_name = '2016年'
2.2、row_number() over(partition by 字段名1,字段名2,…字段名n order by 字段名1,字段名2,…字段名n )
先排序再确定序号,会根据 partition 分区,在每一个小分区内部取序号
select
row_number() over(partition by month_name order by cost_amt) as xuhao,--序号
year_name,--年份名称
month_name,--月份名称
post_code,--岗位编码
post_name,--岗位名称
testtype_code,--试验类型编码
testtype_name,--试验类型名称
cost_amt--产值
from
test_2021 a
where
year_name = '2016年'
-- 根据 月份名称 进行分区,在分区内在进行排序,生成序号。
三、rank()
rank()和row_number() 函数用法类似,但是rank()生成的序号是同值同序的不连续序号,即如果出现相同的值,那么序号是一样的。
select
rank() over(order by cost_amt) as xuhao,--序号
year_name,--年份名称
month_name,--月份名称
post_code,--岗位编码
post_name,--岗位名称
testtype_code,--试验类型编码
testtype_name,--试验类型名称
cost_amt--产值
from
test_2021 a
where
year_name = '2016年'
四、dense_rank()
dense_rank()与rank()的区别在于,dense_rank()生成的序号是连续的。
select
dense_rank() over(order by cost_amt) as xuhao,--序号
year_name,--年份名称
month_name,--月份名称
post_code,--岗位编码
post_name,--岗位名称
testtype_code,--试验类型编码
testtype_name,--试验类型名称
cost_amt--产值
from
test_2021 a
where
year_name = '2016年'
文章来源:https://blog.csdn.net/KevinChen2019/article/details/134858048
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!