在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
子句一起使用,以指定排序的方式。在实际使用中,你需要根据你的需求选择适当的排序方式。