使用 GROUP BY 时 MySQL SUM 不起作用

Posted

技术标签:

【中文标题】使用 GROUP BY 时 MySQL SUM 不起作用【英文标题】:MySQL SUM when using GROUP BY not working 【发布时间】:2010-11-19 10:57:46 【问题描述】:

假设我们有这张桌子:

Symbol | Size
A      | 12
B      | 5
A      | 3
A      | 6
B      | 8

我们想要这样的视图:

Symbol | Size
A      | 21
B      | 13

所以我们使用这个:

Select Symbol, sum(Size) from table group by Symbol order by Symbol ASC

但是我们得到了这个:

Symbol | Size
A      | 12
B      | 5

我做错了什么?!

【问题讨论】:

这些是您在测试中使用的真实列吗?如果有,它们的数据类型是什么? 这是正确的做法。 这是完整的表吗?组函数中唯一重要的问题与列中的空值有关,在这里看不到,但我认为需要完整转储数据才能获得正确答案 不,这还不是全部,它们在表中大约有 45 列和 3000 多行...实际上我在 2 个表中遇到了这个问题,其中一个确实包含 NULL,尽管在另一个表中我使用这个并且有NULL,我没有问题,所以我不认为这是问题 符号是字符串,但是是哪种:varchar、char、text?在您的问题中添加desc table1show create table table1 的输出。并添加一些Symbol的真实值。 【参考方案1】:

你做对了,你应该期待正确的结果。您能否提供有关您正在使用的数据库、其他架构等的更多信息?

也许你有一些关于 Symbol 的唯一索引?

尝试执行以下操作来“测试”您的系统:

SELECT SUM(Size) FROM table

应该是 34

SELECT Symbol, Count(*) FROM table GROUP BY Symbol

应该得到 3 和 2

如果上述两种方法都如您所说的那样完美,请尝试:

SELECT Symbol, Count(*), Sum(Size) FROM table GROUP BY Symbol

这是您的代码,添加了 Count(*) 并且没有 ORDER BY 子句。如果上面两个都做之后还不行,我真的很纳闷……

【讨论】:

不,没有什么独特或特别的。 mysql 5.1的简单数据库表 两者都工作得很好,但老实说,如果我尝试使用 select Symbol, sum(Size) from table group by Symbol order by Symbol ASC 在一个小桌子上它也可以工作,问题是当我尝试在大的东西上使用它时(大小可能是问题吗?或者如果有 NULL 值?)【参考方案2】:

我发现在导致 Un-SUMable 表而不是 left joinSelect 命令的某处有一个简单的 join。虽然我仍然不明白为什么会搞砸计算,我更改了它,现在它可以工作了...很抱歉我无法上传整个内容...

【讨论】:

请提供查询。我也有同样的问题。在您发布查询时,我可能已经找到了解决方案,但它可能对其他人有所帮助 已经快 8 年了,但如果我没记错的话,我在两个连接的表上执行 sum 并将 join 更改为 left join 修复了它。我建议您按照 Roee Adler 的建议,看看其他一切是否正常。 谢谢,我想通了。非常感谢。

以上是关于使用 GROUP BY 时 MySQL SUM 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Mysql 在没有 SUBQUERY 的同一查询中使用 GROUP BY 和 SUM(没有 group by)。可能的?

使用 MySQL 通过 JOIN 获取 GROUP BY 中的 SUM

MySQL 条件 SUM 使用 GROUP BY 和 DISTINCT

使用 sum 和 group by 选项的 Mysql 查询运行速度非常慢

MySQL没有使用SUM中的索引和GROUP BY查询

MYSQL 使用 GROUP BY 到 SUM timediff 得到总打开时间