【问题标题】:Why do I get multiple rows with Sum() and GroupBy为什么我用 Sum() 和 GroupBy 得到多行
【发布时间】:2019-07-20 01:09:03
【问题描述】:

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

表格列数据为

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

仅求和的结果

Select Sum(column) as [column]
From Table

(result)
436.25

【问题讨论】:

    标签: sql sum


    【解决方案1】:

    count, avg, and sum 都是aggregate functions。它们采用一组行并将它们聚合为一个值。 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
    

    【讨论】:

    • 我明白了。我的错误在于我最初如何应用 Group By 将它与导致我意外结果的列一起使用。没有完全低估这些处理的顺序。通过您的解释,我现在可以看到如何期望首先对所有行求和,然后按该列分组是没有意义的。
    • @changedsoul 如果要按总和分组,请使用子查询首先进行总和。然后按子查询中的总和列分组。
    猜你喜欢
    • 2013-02-04
    • 1970-01-01
    • 2013-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-02
    相关资源
    最近更新 更多