0

所以我有一个查询选择,它输出如下内容:(我正在使用的实际结果要复杂得多,但这些是重要的部分)

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 的所有事务的总数,同时仍显示所有事务。我认为该解决方案将与 group by、嵌套选择和 sum 函数有关,但我无法正确理解。

4

2 回答 2

1

窗口函数适用于这种情况:

select
  *
  ,sum(trans) over(partition by id) as total
from
  myTable

SqlFiddle 示例

于 2022-02-07T20:12:11.830 回答
0

一般来说,你想要:

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;
于 2022-02-07T20:12:44.360 回答