获取“COUNT”/“GROUP BY”MySQL查询的空结果
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了获取“COUNT”/“GROUP BY”MySQL查询的空结果相关的知识,希望对你有一定的参考价值。
我遇到的问题与此处发布的问题类似:How can I get a non empty result set when using select, group by and count?
但是,回答者提到的解决方案较慢。我只是想知道是否有任何替代解决方案而不影响性能?
另外,我不明白为什么一个查询像:
SELECT
`a`, `b`, COUNT(*) as `c`
FROM `mytable`
WHERE `status` = 1
GROUP BY `a`,`b`
将返回空结果,只有没有'GROUP BY'部分它会显示预期结果,0为计数值?这可能是一个可能的mysql错误吗?
我也找到了关于mysql bug门户的讨论,类似的问题,这里:http://bugs.mysql.com/bug.php?id=26087
但我猜这个讨论还不够成熟,无法得到合适的答案。
我的问题:
- 这可能是一个可能的mysql错误吗?
- 是否有可能有一个比给定的更好的替代解决方案(开头的链接)?如果有,怎么样?
这不是MySQL的错误。
聚合查询将为每个遇到的组返回一行。没有group by
,有一组 - 整个表。我承认这有点棘手,因为即使表中没有行,仍然有一个组。
使用group by
,每组有一行。如果组中没有行,则该组不会出现。在您的情况下,查询:
SELECT `a`, `b`, COUNT(*) as `c`
FROM `mytable`
WHERE `status` = 1
将返回一行,两个NULL
s,然后是0
。
相同的查询:
GROUP BY `a`,`b`
将不返回任何行,因为没有行来形成组。
实际上,它不是MySQL的错误。但您可以先定义派生表,然后计算其结果。我认为这种行为是因为MySQL操作的层次结构。
SELECT
`a`, `b`, COUNT(*) as `c`
FROM ( SELECT `a`, `b`
FROM `mytable`
WHERE `status` = 1
GROUP BY `a`,`b`) t
以上是关于获取“COUNT”/“GROUP BY”MySQL查询的空结果的主要内容,如果未能解决你的问题,请参考以下文章
mysql在group by之后如何获取每一组中id最大的那一行
mysql在group by之后如何获取每一组中id最大的那一行