您好,我是小DAI,专注于数据库管理员相关的技术问答,请问有什么可以帮您?

PERCENT_RANK 函数 [分析]

根据 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)

其中 是组中行的秩位置, 是 OVER 子句指定的组中的总行数。

PERCENT_RANK 需要使用 OVER (ORDER BY) 子句。ORDER BY 子句指定要执行排序的参数以及每个组中行的排列顺序。此 ORDER BY 子句只在 OVER 子句中使用,而不是 SELECT 的 ORDER BY。不允许排序查询中的任何集合函数指定 DISTINCT。

OVER 子句表示函数对查询结果集进行操作。结果集是在对 FROMWHERE、GROUP BY 和 HAVING 子句求值完成之后返回的行。OVER 子句定义要包括在秩分析函数计算中的行数据集。

ASC 或 DESC 参数用于指定升序或降序排序序列。升序是缺省设置。

PERCENT_RANK 只能在 SELECTINSERT 语句的选择列表中使用,或者在 SELECT 语句的 ORDER BY 子句中使用。PERCENT_RANK 可以在视图中或联合中使用。您不能在子查询、HAVING 子句或者 UPDATEDELETE 语句的选择列表中使用 PERCENT_RANK 函数。每个查询仅允许使用一个秩分析函数。

标准和兼容性

  • SQL - ISO/ANSI SQL 语法的服务商扩充。

  • SAP 数据库产品 - 不受 SAP ASE 或 SAP SQL Anywhere 支持。

    示例

    以下语句说明了 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