八月 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;
1) 在结果集上使用 PERCENT_RANK()
函数的示例
以下示例使用PERCENT_RANK()
函数计算 2019 年每位员工的销售额百分位:
SELECT
name,
amount,
PERCENT_RANK() OVER (
ORDER BY amount
)
FROM
sales_stats
WHERE
year = 2019;
这是输出:
2) 在分区上使用 PERCENT_RANK()
函数的示例
该语句使用PERCENT_RANK()
函数计算 2018 年和 2019 年销售员工的销售额百分位数。
SELECT
name,
amount,
PERCENT_RANK() OVER (
PARTITION BY year
ORDER BY amount
)
FROM
sales_stats;
这是输出:
在这个例子中:
PARTITION BY
子句将sales_stats
表中的行分配到两个分区,一个对应 2018 年,另一个对应 2019 年。ORDER BY
子句按销售额对每个分区中的行进行排序。PERCENT_RANK()
函数应用于每个有序分区以计算百分比排名。
在本教程中,您学习了如何使用 PostgreSQL 的PERCENT_RANK()
函数,来计算一组值中某个值的相对排名。
了解更多
PostgreSQL 教程:窗口函数
PostgreSQL 文档:窗口函数