RATIO_TO_REPORT 基于该函数的数值参数,计算每一行对于该 window 分区中剩余行的分数比率。
元素 | 描述 | 限制 | 语法 |
---|---|---|---|
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,如下例所示。
下列示例基于该查询返回的所有行,计算每一城市的销售额的十进制小数,作为每一城市展示销售额合计的单个报告。
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%。