关于SQL实现新增一列存储某一列的百分比和总和

在实现业务逻辑的时候,我发现如果要求某一列在总数中的百分比占比,可以使用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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容