RATIO_TO_REPORT 函数

RATIO_TO_REPORT 基于该函数的数值参数,计算每一行对于该 window 分区中剩余行的分数比率。

语法

RATIO_TO_REPORT 函数
元素 描述 限制 语法
expression 列名称、别名或常量表达式 expression 必须求值为数值的数据类型。DATE、DATETIME 和 INTERVAL 列不是有效的。如果 expression 引用一列,则该列也必须在该 Projection 子句的选择列表中。 列表达式

用法

此函数计算一行中指定的数值列的值对 OLAP window 框架中每一分区中所有行的值的总和的比率。名称 RATIOTOREPORT 是 RATIO_TO_REPORT 的关键字同义词。

同所有 OLAP window 聚集函数一样,Window PARTITION、Window ORDER 和 Window Frame 子句是可选的。可将该比率应用于分区了的行,或应用于整个查询结果集。如果还指定 window Frame 子句,则该比率应用于来自当前 window 框架的所有行。

所需要的 expression 参数必须指定数值数据类型的列,或为求值为数值数据类型的常量表达式。如果 expression 不是数值数据类型,则该函数失败并报错消息 -25862。

如果当前 window 分区中所有行的 expression 值的总和为零,则此函数为那个分区中的每一行返回 NULL 值。

如果诸如 SUM 或 MAX 这样的另一 OLAP 聚集函数有一空的 OVER 子句,或如果 OVER 子句仅包含单个 window PARTITION 规范,则对于该分区中的每行,该 OLAP 函数的结果都一样。然而,对于 RATIO_TO_REPORT,不是这种情况,因为对同一 window 分区中的不同行指定不同的比率,每一分区合计(大约)为 1。要将比率转换为百分率,将该函数表达式乘以 100,如下例所示。

示例:RATIO_TO_REPORT 函数

下列示例基于该查询返回的所有行,计算每一城市的销售额的十进制小数,作为每一城市展示销售额合计的单个报告。

SELECT city, SUM(dollars) AS SALES, 
        RATIO_TO_REPORT(SUM(dollars)) OVER() *100 AS RATIO_DOLLARS
        FROM sales, store, period
        WHERE sales.store_id = store.store_id 
        AND sales.period_id = period.period_id
        GROUP BY CITY
        ORDER BY SALES DESC; 
      
CITY               SALES           RATIO_DOLLARS 
        San Jose           896931.15          12.58
        Atlanta            514830.00           7.22
        Miami              507022.35           7.11
        Los Angeles        503493.10           7.06
        Phoenix            437863.00           6.14
        New Orleans        429637.75           6.03
        Cupertino          424215.00           5.95
        Boston             421205.75           5.91
        Houston            417261.00           5.85
        New York           397102.50           5.57
        Los Gatos          394086.50           5.53
        Philadelphia       392377.75           5.50
        Milwaukee          389378.25           5.46
        Detroit            305859.75           4.29
        Chicago            294982.75           4.14
        Hartford           236772.75           3.32
        Minneapolis        165330.75           2.32

在上述示例中,RATIO_TO_REPORT 的 expression 参数是数值的聚集函数表达式 SUM(dollars)。输出的最后一行表明 city Minneapolis 的 sales 值大约是该查询报告的合计销售额的 2.32%。

1 请参阅 OLAP window 表达式的 OVER 子句