所以我有一个查询选择,它输出如下内容:(我正在处理的实际结果要复杂得多,但这些是重要的部分(
id trans
123 5.00
124 6.00
124 7.00
125 8.00
125 9.00
我想创建这样的结果:
id trans total
123 5.00 5.00
124 6.00 13.00
124 7.00 13.00
125 8.00 17.00
125 9.00 17.00
基本上,我想添加一列,其中包含每个id的所有事务的总数,同时仍然显示所有事务。我认为这个解决方案与分组依据、嵌套选择和求和函数有关,但我做不好。
窗口函数适用于此场景:
select
*
,sum(trans) over(partition by id) as total
from
myTable
SqlFiddle示例
一般来说,您需要:
SUM(value) OVER (PARTITION BY group)
如果第一个输出来自:
SELECT id, SUM(col) AS trans
FROM table
GROUP BY id;
那么你需要这个:
SELECT id, SUM(col) AS trans, SUM(SUM(col)) OVER (PARTITION BY id) AS id_total
FROM table
GROUP BY id;
如果第一个输出来自:
SELECT id, trans
FROM table;
那么你需要这个:
SELECT id, trans, SUM(trans) OVER (PARTITION BY id) AS id_total
FROM table;