sql - 为什么我用 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
解决方案
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
推荐阅读
- c++ - 带有 std::pair 赋值的模板化 += 运算符重载
- git - Jenkins git插件在密码中添加奇怪的字符
- java - HTTP 状态 500 没有属性“id”
- hibernate - 获取 manyToOne 的对象时出现空指针异常
- symfony - Symfony 4:无法以 ROLE_ADMIN 身份访问
- schema.org - 结合或单独使用 Schema.org 的“网站”和“文章”
- rabbitmq - 在 centOS 7.6 上使用 RabbitMQ 3.7.15 和 Erlang 22.0.1 / 22.0.2 的安全性不足
- python - 操作数无法与形状一起广播 <56962,2> .. 错误
- vba - 在首页页眉中插入图像,并在 VBA 中定义其位置
- php - 如何在没有任何隐藏字段的情况下通过 PHP 发布数据以在表单中查询?