Amazon Redshift
数据库开发人员指南 (API Version 2012-12-01)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

DENSE_RANK 开窗函数示例

使用 ORDER BY 进行紧密排名

按销量对表进行排序(按降序顺序),并将紧密排名和常规排名分配给每个行。在应用开窗函数结果后,对结果进行排序。

Copy
select salesid, qty, dense_rank() over(order by qty desc) as d_rnk, rank() over(order by qty desc) as rnk from winsales order by 2,1; salesid | qty | d_rnk | rnk ---------+-----+-------+----- 10001 | 10 | 5 | 8 10006 | 10 | 5 | 8 30001 | 10 | 5 | 8 40005 | 10 | 5 | 8 30003 | 15 | 4 | 7 20001 | 20 | 3 | 4 20002 | 20 | 3 | 4 30004 | 20 | 3 | 4 10005 | 30 | 2 | 2 30007 | 30 | 2 | 2 40001 | 40 | 1 | 1 (11 rows)

在同一查询中一起使用 DENSE_RANK 和 RANK 函数时,记下已分配给同一组行的排名的差异。有关 WINSALES 表的说明,请参阅开窗函数示例

使用 PARTITION BY 和 ORDER BY 进行紧密排名

按 SELLERID 对表进行分区,按数量对每个分区进行排序(按降序顺序),并为每个行分配紧密排名。在应用开窗函数结果后,对结果进行排序。

Copy
select salesid, sellerid, qty, dense_rank() over(partition by sellerid order by qty desc) as d_rnk from winsales order by 2,3,1; salesid | sellerid | qty | d_rnk ---------+----------+-----+------- 10001 | 1 | 10 | 2 10006 | 1 | 10 | 2 10005 | 1 | 30 | 1 20001 | 2 | 20 | 1 20002 | 2 | 20 | 1 30001 | 3 | 10 | 4 30003 | 3 | 15 | 3 30004 | 3 | 20 | 2 30007 | 3 | 30 | 1 40005 | 4 | 10 | 2 40001 | 4 | 40 | 1 (11 rows)

有关 WINSALES 表的说明,请参阅开窗函数示例