【问题标题】:MySQL SUM when using GROUP BY not working使用 GROUP BY 时 MySQL SUM 不起作用
【发布时间】: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的真实值。

标签: mysql select group-by sum


【解决方案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 的建议,看看其他一切是否正常。
  • 谢谢,我想通了。非常感谢。
猜你喜欢
  • 1970-01-01
  • 2017-04-28
  • 1970-01-01
  • 1970-01-01
  • 2014-01-12
  • 2020-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多