排序序号

博客给出了row_number() over(order by 列 asc) rn这一代码,这是在数据库中使用row_number()函数按指定列升序排序并赋予行号的常见用法,属于数据库操作相关内容。
row_number() over(order by 列 asc) rn
### Oracle 分组排序生成序号的实现方法 在 Oracle 数据库中,`ROW_NUMBER()` 和 `RANK()` 函数可以用于分组排序并生成序号。以下是两种函数的详细说明和使用示例。 #### 使用 ROW_NUMBER() 函数 `ROW_NUMBER()` 函数为每一行分配一个唯一的连续序号,基于指定的排序规则,并且不会跳过任何编号。以下是一个典型的用法示例: ```sql SELECT col1, col2 FROM ( SELECT t.*, ROW_NUMBER() OVER (PARTITION BY col1 ORDER BY col2 DESC) AS rn FROM tmp_test t ) WHERE rn = 1; ``` 上述代码的作用是:对表 `tmp_test` 按照列 `col1` 进行分组,然后在每个分组内按照列 `col2` 的降序排列,并为每行分配一个从 1 开始的唯一序号[^1]。最终查询结果只返回每个分组中的第一行数据。 #### 使用 RANK() 函数 `RANK()` 函数为每一行分配一个排名,如果存在相同的值,则会分配相同的排名,但会导致序号不连续。例如: ```sql SELECT col1, col2, rank_value FROM ( SELECT t.*, RANK() OVER (PARTITION BY col1 ORDER BY col2 DESC) AS rank_value FROM tmp_test t ) WHERE rank_value <= 3; ``` 这段代码的功能是对表 `tmp_test` 按照列 `col1` 分组,在每个分组内按列 `col2` 的降序排列,并为每行分配一个排名。最终查询结果会返回每个分组中排名前 3 的行。 #### 区别与适用场景 - `ROW_NUMBER()`:适用于需要为每一行分配唯一连续序号的场景。 - `RANK()`:适用于需要为具有相同值的行分配相同排名的场景,但可能导致序号不连续。 #### 注意事项 在实际应用中,需要根据业务需求选择合适的函数。如果需要唯一且连续的序号,推荐使用 `ROW_NUMBER()`;如果允许排名重复且不关心序号连续性,则可以选择 `RANK()` 或 `DENSE_RANK()`[^1]。 ```sql -- 示例:使用 DENSE_RANK() SELECT col1, col2, dense_rank_value FROM ( SELECT t.*, DENSE_RANK() OVER (PARTITION BY col1 ORDER BY col2 DESC) AS dense_rank_value FROM tmp_test t ) WHERE dense_rank_value <= 3; ``` `DENSE_RANK()` 是另一种排名函数,其行为类似于 `RANK()`,但不会跳过序号。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值