我正在努力解决SQL聚合函数。我需要运行SUM
函数和GROUP BY
,但同时添加总计而不将其分组为测量数据。这是一个简单的演示数据集:
select a.item, sum(a.value) from SALES a
group by a.item, a.region
结果本质上是这样的:
SALES
ITEM REGION Sum(Value)
Apple North 4
Orange South 7
Apple South 3
Apple East 5
Orange East 6
Orange North 5
这很好地总结了商品销售并根据地区和商品将它们分组。不过,我缺少的是我不是在追求汇总值本身,而是在按地区划分的销售额比率。
即苹果在不同地区的销量为4 + 3 + 5,所以总共有12个,我正在寻找每个地区在总销量中所占的份额。如果我只能在查询中显示销售比率而没有实际销售数字,那就更好了,但不是很关键。
我目前正在寻找另一个专栏,其中所有苹果或橙子的销售额将汇总在一个单独的专栏中,因此我可以将它们进行划分以获得答案,但是我不确定如何做到这一点我也不知道这是前进的正确方法。
但是它会寻找这样的东西:
SALES
ITEM REGION Value Total
Apple North 4 12
Orange South 7 18
Apple South 3 12
Apple East 5 12
Orange East 6 18
Orange North 5 18
我不确定使用db引擎,但是常规SQL似乎可以工作。我将最终从Excel运行此查询,因此我可以利用Excel工具将地区销售额与总销售额相除以获得份额,但是,如果可以由查询本身来处理,那显然会更好。
非常感谢您的帮助!
答案 0 :(得分:1)
我认为您只需要一个窗口函数:
select s.item, s.region, sum(s.value),
sum(sum(s.value)) over (partition by item) as region_total
from SALES s
group by s.item, s.region;