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
在其产品类型中的占比。