具有不同分组的SQL聚合函数

时间:2018-10-03 21:32:36

标签: sql

我正在努力解决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工具将地区销售额与总销售额相除以获得份额,但是,如果可以由查询本身来处理,那显然会更好。

非常感谢您的帮助!

1 个答案:

答案 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;