row_number() over(partition by 和 rank()over(order by )区别
时间: 2023-09-08 15:13:47 浏览: 304
RANK OVER()和ROW_NUMBER()OVER的使用
row_number() over(partition by ...) 和 rank() over(order by ...) 都是窗口函数,用于在查询结果中为每一行分配一个排名。它们的区别在于如何处理并列的值。
1. row_number() over(partition by ...):
- row_number()函数为每个分区内的行分配唯一的连续排名。
- partition by 子句用于指定分区的条件,相同的条件会被视为同一分区。
- 每个分区的第一行的排名为1,第二行的排名为2,以此类推。
2. rank() over(order by ...):
- rank()函数为具有相同排序值的行分配相同的排名,但可能会跳过一些排名。
- order by 子句用于指定排序的条件。
- 如果有两行具有相同的排序值,则它们将被分配相同的排名,并且下一行将跳过相应数量的排名。
简而言之,row_number()函数为每个分区内的行分配唯一的连续排名,而rank()函数为具有相同排序值的行分配相同的排名,可能会跳过一些排名。
阅读全文