请考虑下表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
上的groupID
和SUM
上的value
,从而产生
groupID groupSum
-------------------
100 -32.50
130 5.00
140 -11.25
210 5.75
但这显然不是我需要的,我不知道如何开始有一个选择整个表的查询,但是在输出中添加了sum
之后的组记录。
非常感谢任何帮助。
答案 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的位置和查询。