根据 ORDER BY 子句的定义,计算查询返回的一行相对于该查询返回的其它行的(小数)位置。
它返回介于 0 和 1 之间的小数值。
PERCENT_RANK () OVER ( ORDER BY [ ASC | DESC ] ) 参数说明expression排序规范,可以是涉及列引用、集合的任意有效表达式,也可以是调用这些项目的表达式。
PERCENT_RANK 函数返回介于 0 和 1 之间的 DOUBLE 值。
PERCENT_RANK 是秩分析函数。行 R 的百分比秩是指将在 OVER 子句中指定的组中的某个行的秩减去一,再除以在 OVER 子句中指定的组中的总行数减去一得出的值。PERCENT_RANK 返回一个介于 0 和 1 之间的值。第一行的百分比秩为零。
行的 PERCENT_RANK 的计算公式:
(Rx - 1) / (NtotalRow - 1)其中
PERCENT_RANK 需要使用 OVER (ORDER BY) 子句。ORDER BY 子句指定要执行排序的参数以及每个组中行的排列顺序。此 ORDER BY 子句只在 OVER 子句中使用,而不是 SELECT 的 ORDER BY。不允许排序查询中的任何集合函数指定 DISTINCT。
OVER 子句表示函数对查询结果集进行操作。结果集是在对 FROM、WHERE、GROUP BY 和 HAVING 子句求值完成之后返回的行。OVER 子句定义要包括在秩分析函数计算中的行数据集。
ASC 或 DESC 参数用于指定升序或降序排序序列。升序是缺省设置。
PERCENT_RANK 只能在 SELECT 或 INSERT 语句的选择列表中使用,或者在 SELECT 语句的 ORDER BY 子句中使用。PERCENT_RANK 可以在视图中或联合中使用。您不能在子查询、HAVING 子句或者 UPDATE 或 DELETE 语句的选择列表中使用 PERCENT_RANK 函数。每个查询仅允许使用一个秩分析函数。
以下语句说明了 PERCENT_RANK 函数的用法:
SELECT s_suppkey, SUM(s_acctBal) AS sum_acctBal,
PERCENT_RANK() OVER ( ORDER BY SUM(s_acctBal) DESC )
AS percent_rank_all FROM supplier GROUP BY s_suppkey;
s_suppkey sum_acctBal percent_rank_all
supplier#011 200000 0
supplier#002 200000 0
supplier#013 123000 0.3333
supplier#004 110000 0.5
supplier#035 110000 0.5
supplier#006 50000 0.8333
supplier#021 10000 1