sql 精读(三) 标准 SQL 中的编号函数示例
编号函数概念
编号函数会根据每一行在指定窗口中的位置向该行分配整数值。
RANK()、DENSE_RANK() 和 ROW_NUMBER() 示例:
WITH Numbers AS
(SELECT 1 as x
UNION ALL SELECT 2
UNION ALL SELECT 2
UNION ALL SELECT 5
UNION ALL SELECT 8
UNION ALL SELECT 10
UNION ALL SELECT 10
)
SELECT x,
RANK() OVER (ORDER BY x ASC) AS rank,
DENSE_RANK() OVER (ORDER BY x ASC) AS dense_rank,
ROW_NUMBER() OVER (ORDER BY x) AS row_num
FROM Numbers
x | rank | dense_rank | row_num |
---|---|---|---|
1 | 1 | 1 | 1 |
2 | 2 | 2 | 2 |
2 | 2 | 2 | 3 |
5 | 4 | 3 | 4 |
8 | 5 | 4 | 5 |
10 | 6 | 5 | 6 |
10 | 6 | 5 | 7 |
-
List item
-
RANK():x=5 时,rank 返回 4,因为 RANK() 按前一个窗口排序组中对等项的数量递增。
-
DENSE_RANK():对于 x=5,dense_rank 返回 3,因为 DENSE_RANK() 总是递增 1,绝不跳过值。
-
ROW_NUMBER():x=5 时,row_num 返回 4。