获取“COUNT”/“GROUP BY”MySQL查询的空结果

问题描述 投票:0回答:2

我遇到的问题与此处发布的问题类似: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 sql select count group-by
2个回答
2
投票

这不是MySQL的错误。

聚合查询将为每个遇到的组返回一行。没有group by,有一组 - 整个表。我承认这有点棘手,因为即使表中没有行,仍然有一个组。

使用group by,每组有一行。如果组中没有行,则该组不会出现。在您的情况下,查询:

SELECT `a`, `b`, COUNT(*) as `c`
FROM `mytable` 
WHERE `status` = 1

将返回一行,两个NULLs,然后是0

相同的查询:

GROUP BY `a`,`b`

将不返回任何行,因为没有行来形成组。


1
投票

实际上,它不是MySQL的错误。但您可以先定义派生表,然后计算其结果。我认为这种行为是因为MySQL操作的层次结构。

SELECT
`a`, `b`, COUNT(*) as `c`
FROM ( SELECT `a`, `b`
FROM `mytable` 
WHERE `status` = 1
GROUP BY `a`,`b`) t
© www.soinside.com 2019 - 2024. All rights reserved.