使用 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 table1
或show 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 join
的 Select
命令的某处有一个简单的 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