📅  最后修改于: 2023-12-03 15:33:45.759000             🧑  作者: Mango
在 PostgreSQL 中,DENSE_RANK
是一种窗口函数,用于计算结果集中唯一值的密集排名。与 RANK
函数不同的是,如果有多个值具有相同的排序值,DENSE_RANK
函数将为它们分配相同的排名,跳过下一个排名。
DENSE_RANK() OVER (
[PARTITION BY partition_expression, ... ]
ORDER BY sort_expression [ASC | DESC], ...
)
partition_expression
: 可选参数,用于对结果集进行分区,相同分区的行将共享一个排序范围。sort_expression
: 必需参数,用于指定按升序或降序排序的列或表达式。例如,考虑以下示例表 sales
:
sellers | products | sales_amount
--------|----------|-------------
S1 | P1 | 1000
S1 | P2 | 800
S2 | P1 | 1200
S2 | P2 | 1500
S3 | P1 | 2000
S3 | P2 | 2400
S4 | P1 | 1000
S4 | P2 | 800
如果想要找出销售最高的产品以及销售最好的销售员,可以使用以下查询:
SELECT sellers, products, sales_amount,
DENSE_RANK() OVER (ORDER BY sales_amount DESC) AS sales_rank,
DENSE_RANK() OVER (PARTITION BY products ORDER BY sales_amount DESC) AS product_rank
FROM sales;
查询结果:
sellers | products | sales_amount | sales_rank | product_rank
--------|----------|-------------|------------|--------------
S3 | P2 | 2400 | 1 | 1
S3 | P1 | 2000 | 2 | 2
S2 | P2 | 1500 | 3 | 3
S2 | P1 | 1200 | 4 | 4
S1 | P1 | 1000 | 5 | 5
S4 | P1 | 1000 | 5 | 5
S1 | P2 | 800 | 6 | 6
S4 | P2 | 800 | 6 | 6
上述查询利用 DENSE_RANK
来计算每个产品和销售员的密集排名。在这个结果集中,我们可以发现销售量最高的产品是“P2”,而销售最好的销售员是“S3”。而对于两个销售额排名相同的产品或销售员,DENSE_RANK
函数将跳过下一个排名。
本文介绍了 PostgreSQL 中的 DENSE_RANK
函数的语法、参数以及使用示例。这个函数可用于计算结果集中唯一值的密集排名,它与 RANK
函数不同的是,如果有多个值具有相同的排序值,将为它们分配相同的排名,跳过下一个排名。