SQL 总和产生意外输出

SQL aggregate sum produces unexpected output

我不明白 sum 是如何工作的。

对于 dbeaver 中的 PostgreSQL table:

一个 b c d
1 2 3 2
1 2 4 3
2 1 3 2
2 1 4 2
3 2 4 2

查询

select a, b, c, d, sum(c) as sum_c, sum(d) as sum_d from abc a group by a, b, c, d

产生

一个 b c d sum_c sum_d
1 2 3 2 3 2
1 2 4 3 4 3
2 1 3 2 3 2
2 1 4 2 4 2
3 2 4 2 4 2

我不明白为什么:我预计每行中的 sum_c 会是 18,这是 csum_d 中值的总和出于同样的原因,将是 11

为什么 sum_csum_d 只复制每行 cd 的值?

您无法通过 group by 获得您想要的结果。
当您使用 group by 进行聚合时,您会为 group by 之后的所有列创建组,并且对于这些组中的每一个,您都会获得聚合结果。
对于您的示例数据,一组是 1,2,3,2 并且对于此值组合,您得到 c 的总和,即 3 因为只有 1 行 c=3组.

使用SUM()window函数:

SELECT a, b, c, d, 
       SUM(c) OVER () sum_c, 
       SUM(d) OVER () sum_d 
FROM abc