ratio_to_report 是一个在 SQL 中使用的分析函数,用于计算某个值在其所在组中的占比。它通常用于生成报表,以便更好地理解数据分布。

语法

RATIO_TO_REPORT(expression) OVER (
    [PARTITION BY partition_expression]
)

参数

  • expression:要计算占比的数值表达式。
  • PARTITION BY partition_expression:可选参数,用于指定分组条件。如果不指定,则整个结果集作为一个组。

示例

假设有一个名为 sales 的表,包含以下数据:

id product sales_amount
1 A 100
2 B 200
3 C 150
4 D 300

我们希望计算每个产品的销售额在总销售额中的占比。

SELECT
    id,
    product,
    sales_amount,
    RATIO_TO_REPORT(sales_amount) OVER () AS sales_ratio
FROM
    sales;

结果将如下:

id product sales_amount sales_ratio
1 A 100 0.125
2 B 200 0.25
3 C 150 0.1875
4 D 300 0.375

在这个例子中,RATIO_TO_REPORT(sales_amount) OVER () 计算了每个 sales_amount 在总销售额中的占比。

分组示例

如果我们希望按产品类型分组计算占比,可以使用 PARTITION BY 子句。假设有一个名为 sales_by_type 的表,包含以下数据:

id product_type product sales_amount
1 Type1 A 100
2 Type1 B 200
3 Type2 C 150
4 Type2 D 300

我们希望计算每个产品的销售额在其产品类型中的占比。

SELECT
    id,
    product_type,
    product,
    sales_amount,
    RATIO_TO_REPORT(sales_amount) OVER (PARTITION BY product_type) AS sales_ratio
FROM
    sales_by_type;

结果将如下:

id product_type product sales_amount sales_ratio
1 Type1 A 100 0.3333
2 Type1 B 200 0.6667
3 Type2 C 150 0.3333
4 Type2 D 300 0.6667

在这个例子中,RATIO_TO_REPORT(sales_amount) OVER (PARTITION BY product_type) 计算了每个 sales_amount 在其产品类型中的占比。