首页 > 解决方案 > 为什么我用 Sum() 和 GroupBy 得到多行

问题描述

当我对一列求和时,我得到一个汇总所有行的结果。当我按此求和列分组时,我会返回多行。有人可以解释发生了什么吗?它是否秘密地将所有具有相同数据的行分组并首先将这些全部汇总为单独的行?

表列数据是

9.75
2.25
8.25
8.25
7
8
5
10.5
5
10.5
10.5
10.25
10.5
10.5
5
5
0.5
5
5
0.5
5
5
0.5
5
5
0.5
5
5
0.5
5
5
0.5
5
5
0.5
5
5
0.5
5
5
0.5
5
5
0.5
1.5
5
1.75
0.5
5
5
0.5
1.5
5
1.75
0.5
5
5
0.5
5
5
0.5
5
5
0.5
5
5
0.5
5
5
0.5
5
5
0.5
5
5
0.5
5
5
0.5
1.75
5
5
0.5
5
10
10
10
10
5
0.5
5
5
0.5
1.75
5
1.5
0.5
5
5
0.5
5
5
0.5
NULL

我从“按列分组”得到的结果

Select Sum(column) as [column]
From Table
Group By column  

(Result)
NULL
13.5
4.5
7
2.25
265
7
8
16.5
9.75
40
10.25
52.5

仅来自 Sum 的结果

Select Sum(column) as [column]
From Table

(result)
436.25

标签: sqlsum

解决方案


count, avg, 和sum都是聚合函数。它们采用一组行并将它们聚合为一个值。count给出行数,avg给出它们的平均值,并将sum它们相加。

默认情况下,所有行都聚合在一起。group by允许您将事物分成更多组。当您group by column说将具有相同值的所有行聚合在一起时column。因此,您将获得具有相同值的所有行的总和column

您还可以通过选择列和计数来查看这一点。

select column, count(column), sum(column)
from table
group by column

你会发现那sum(column)column时代count(column)。例如。

column, count(column), sum(column)
1.5     3              4.5
8       1              8
10      4              40

推荐阅读