基于groupID的总和值

时间:2017-11-23 21:18:05

标签: sql

请考虑下表Data

#ID    groupID    value
------------------------
  1    100        -22.50
  2    100        -10.00
  3    130         15.00
  4    140        -11.25
  5    130        -10.00
  6    210          5.75

我需要将每groupID的总和作为附加列添加,如下所示:

#ID    groupID    value     groupSum
------------------------------------
  1    100        -22.50      -32.50
  2    100        -10.00      -32.50
  3    130         15.00        5.00
  4    140        -11.25      -11.25
  5    130        -10.00        5.00
  6    210          5.75        5.75

如果我只想按groupID求和,我可以GROUP BY上的groupIDSUM上的value,从而产生

groupID    groupSum
-------------------
100        -32.50
130          5.00
140        -11.25
210          5.75

但这显然不是我需要的,我不知道如何开始有一个选择整个表的查询,但是在输出中添加了sum之后的组记录。

非常感谢任何帮助。

4 个答案:

答案 0 :(得分:3)

您需要使用窗口分区。

select
    *
    ,sum([value]) over(partition by [groupid]) as [GroupTotal]
from tablename

答案 1 :(得分:0)

这种方法怎么样:

SELECT d.#ID, d.groupID, d.value, g.groupSum
FROM Data d LEFT JOIN (SELECT groupID, SUM(value) groupSum
                       FROM Data
                       GROUP BY groupID) g ON d.groupID = g.groupID

答案 2 :(得分:0)

如果窗口功能不可用,您可以使用自联接

 select d1.*, sum(d2.value) as groupsum
 from data d1
 left join data d2 on d1.groupID = d2.groupID
 group by d1.id

答案 3 :(得分:0)

首先,您应选择分组依据来计算表格中的值总和。

3.5^5

其次,您应该使用第一个表格右键加入(以参与表的所有行)上面的查询,将sum列添加为  新专栏。所以你的问题的最终结果是:

select groupID, sum(value) as SS
from table_name
group by groupID

您可以使用LEFT JOIN代替。只需在最终答案中切换table_name的位置和查询。