为什么这个聚合查询返回的行少于它应该的?

时间:2010-11-20 22:25:07

标签: mysql left-join aggregate-functions

我有经典的'获取一个表中的所有行以及另一个表中相应行的数量'这个问题应该通过此查询来解决:

SELECT
    ideas.id,
    ideas.idea,
    submitted,
    COUNT(votes.id) AS vote_count
FROM ideas
LEFT OUTER JOIN votes ON ideas.id = votes.idea
WHERE dead = 0
GROUP BY votes.idea
ORDER BY vote_count DESC, submitted DESC
LIMIT 10;

想法中有4行(死亡= 0),投票中有一行(与第一个想法相关)。但是,此查询返回两个记录(想法#1和想法#2)以及正确的vote_counts。为什么这不会返回想法中的所有记录?

2 个答案:

答案 0 :(得分:3)

当您说GROUP BY votes.idea时,您要求每个创意值的一个结果行投票。既然你说投票只有一行,你应该只期望结果中有两个记录 - 一个对应于该行投票中的想法值,另一个对应于NULL(缩小三行没有匹配的投票记录)。

您的意思是GROUP BY ideas.idea吗?

答案 1 :(得分:1)

变化:

GROUP BY votes.idea

为:

GROUP BY ideas.id

因为votes.idea可以为NULL。