在实现业务逻辑的时候,我发现如果要求某一列在总数中的百分比占比,可以使用ratio_to_report()分析函数或者先求总数再求百分比
例1:
原表:
MONTH_ID AREA SALE
--------- ---- ----
201701 华北 100
201701 华南 40
201701 华东 40
201701 西北 20
201702 华北 100
201702 华南 40
201702 华东 40
201702 西北 20
--需求1 按区域统计销售额占比
--常规实现,用分析函数sum() over() 计算出分组的合计值
SQL> select t.area,
2 sum(sale) sale_sum,
3 sum(sum(sale)) over() sale_total,
4 sum(sale) / sum(sum(sale)) over() sale_ratio
5 from t
6 group by t.area;
AREA SALE_SUM SALE_TOTAL SALE_RATIO
华北 200 400 0.5
华南 80 400 0.2
华东 80 400 0.2
西北 40 400 0.1
--ratio_to_report 分析函数实现
SQL> select t.area,
2 sum(sale) sale_sum,
3 ratio_to_report(sum(sale)) over() sale_ratio
4 from t
5 group by t.area;
AREA SALE_SUM SALE_RATIO
华北 200 0.5
华南 80 0.2
华东 80 0.2
西北 40 0.1
--需求2 按月份分组,计算每个区域销售额占当月销售总额比重
SQL> select t.month_id,
2 t.area,
3 sale,
4 ratio_to_report(sale) over(partition by t.month_id) sale_ratio
5 from t;
MONTH_ID AREA SALE SALE_RATIO
201701 华北 100 0.5
201701 华东 40 0.2
201701 华南 40 0.2
201701 西北 20 0.1
201702 华北 100 0.5
201702 华东 40 0.2
201702 华南 40 0.2
201702 西北 20 0.1
————————————————
版权声明:本文为CSDN博主「SeanData」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/seandba/java/article/details/74190329