在SQL中,ROW_NUMBER(), RANK(), 和 DENSE_RANK() 是用于执行窗口排序的窗口函数。这些函数用于为结果集中的行分配排名,但它们在处理相同排名时有一些区别。下面我将分别演示这三种窗口排序函数的用法和区别:
ROW_NUMBER():
为每一行分配一个唯一的整数值,不考虑相同值的情况。
如果有相同的值,它们将被分配不同的行号。
SELECT
column1,
column2,
ROW_NUMBER() OVER (ORDER BY column1) AS row_num
FROM your_table;
RANK():
为每一行分配一个排名,相同值将得到相同的排名,但是下一个值的排名会跳过相同排名的数量。
SELECT
column1,
column2,
RANK() OVER (ORDER BY column1) AS rank_num
FROM your_table;
DENSE_RANK():
为每一行分配一个排名,相同值将得到相同的排名,但是下一个值的排名不会跳过相同排名的数量,排名是连续的。
SELECT
column1,
column2,
DENSE_RANK() OVER (ORDER BY column1) AS dense_rank_num
FROM your_table;
这里的column1和column2是你要排序的列。请注意,这些窗口函数通常与OVER子句一起使用,以指定排序的方式。在实际使用中,你需要根据你的需求选择适当的排序方式。