PostgreSQL 教程: percent_rank 函数

八月 27, 2023

摘要:在本教程中,您将学习如何使用 PostgreSQL 的PERCENT_RANK()函数,来计算一组值中某个值的相对排名。

PostgreSQL PERCENT_RANK() 函数介绍

PERCENT_RANK()函数就像CUME_DIST()函数一样。PERCENT_RANK()函数计算某个值在一组值中的相对地位。

下面说明了PERCENT_RANK()函数的语法:

PERCENT_RANK() OVER (
    [PARTITION BY partition_expression, ... ]
    ORDER BY sort_expression [ASC | DESC], ...
)

在这个语法中:

PARTITION BY

PARTITION BY子句将行划分为应用PERCENT_RANK()函数的多个分区。

PARTITION BY子句是可选的。如果省略它,该函数会将整个结果集视为单个分区。

ORDER BY

ORDER BY子句指定应用该函数的每个分区中的行顺序。

返回值

PERCENT_RANK()函数返回大于 0 且小等于 1 的结果。

0 < PERCENT_RANK() <= 1

第一个值的排名始终为零。平局值计算为相同的累积分布值。

PostgreSQL PERCENT_RANK() 示例

我们将使用CUME_DIST()函数教程中创建的sales_stats表进行演示。

SELECT 
	year,
	name,
	amount
FROM 
	actual_sales
ORDER BY 
	year, name;

sales_stats table

1) 在结果集上使用 PERCENT_RANK() 函数的示例

以下示例使用PERCENT_RANK()函数计算 2019 年每位员工的销售额百分位:

SELECT 
    name,
	amount,
    PERCENT_RANK() OVER (
        ORDER BY amount
    )
FROM 
    sales_stats
WHERE 
    year = 2019;

这是输出:

PostgreSQL PERCENT_RANK Function Over a Result Set example

2) 在分区上使用 PERCENT_RANK() 函数的示例

该语句使用PERCENT_RANK()函数计算 2018 年和 2019 年销售员工的销售额百分位数。

SELECT 
    name,
	amount,
    PERCENT_RANK() OVER (
		PARTITION BY year
        ORDER BY amount
    )
FROM 
    sales_stats;

这是输出:

PostgreSQL PERCENT_RANK Function Over a Partition example

在这个例子中:

  • PARTITION BY子句将sales_stats表中的行分配到两个分区,一个对应 2018 年,另一个对应 2019 年。
  • ORDER BY子句按销售额对每个分区中的行进行排序。
  • PERCENT_RANK()函数应用于每个有序分区以计算百分比排名。

在本教程中,您学习了如何使用 PostgreSQL 的PERCENT_RANK()函数,来计算一组值中某个值的相对排名。