基于其他列值计算各国订单占总订单份额 保留国家列
各国家订单数占总订单份额计算实现
核心思路
要在保留所有原有字段(含country列)的前提下计算占比,不要用GROUP BY聚合(会压缩行、丢失明细字段),直接用窗口函数计算全表订单总和,再逐行做除法即可,计算后保留3位小数匹配输出要求。
可直接运行的标准SQL代码
SELECT customer_id, country, count_orders, ROUND( count_orders / SUM(count_orders) OVER (), 3 ) AS share_total_orders FROM 你的输入表名;
逻辑说明&样例校验
SUM(count_orders) OVER ()是无分区的窗口聚合,会返回全表所有行的订单数总和,不会改变原有行数,所有原字段都会完整保留- 代入给定样例数据:总订单数=43+94=137
- GB占比:
43/137 ≈ 0.313 - US占比:
94/137 ≈ 0.686
完全匹配预期输出结果
- GB占比:
兼容注意
如果你的执行环境存在整数除法默认截断取整的问题(比如部分老版本MySQL、PostgreSQL),把除法部分改成count_orders * 1.0 / SUM(count_orders) OVER ()即可得到正确的浮点结果。
内容的提问来源于stack exchange,提问作者user12625679
相关产品推荐
相关产品推荐

