我遇到的问题与此处发布的问题类似: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的错误。
聚合查询将为每个遇到的组返回一行。没有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