代码之家  ›  专栏  ›  技术社区  ›  Ross

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

  •  1
  • Ross  · 技术社区  · 14 年前

    我有一个经典的“在一个表中获取所有行,并在另一个表中获取相应行数”问题,应该通过这个查询来解决:

    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行(dead=0),投票中有1行(与第一个想法相关)。但是,此查询返回两个记录(IDEA_1和IDEA_2),并具有正确的投票计数。为什么这不返回所有想法的记录?

    2 回复  |  直到 12 年前
        1
  •  3
  •   Larry Lustig    14 年前

    当你说 GROUP BY votes.idea ,您在投票中要求每个想法值有一个结果行。因为你说投票只有一行,你应该期望结果中只有两个记录,一个对应于该行投票的想法值,另一个为空(压缩三行,没有匹配的投票记录)。

    你是说 GROUP BY ideas.idea ?

        2
  •  1
  •   Mark Byers    14 年前

    变化:

    GROUP BY votes.idea
    

    到:

    GROUP BY ideas.id
    

    因为 votes.idea 可以为空。