📜  PostgreSQL- DENSE_RANK函数(1)

📅  最后修改于: 2023-12-03 15:33:45.759000             🧑  作者: Mango

PostgreSQL - DENSE_RANK函数

在 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 函数不同的是,如果有多个值具有相同的排序值,将为它们分配相同的排名,跳过下一个排名。