MySQL使用JOIN语句计算匹配的行

时间:2014-07-15 01:46:16

标签: mysql join count

我有两张表groupsusers。我想编写一个返回groups行的查询,其中包含一个额外列,其中显示users中有多少行gid与相应组的id匹配。我编写了一个工作正常的查询,除了users表中没有用户gid的用户,在这种情况下,结果中省略了group

SELECT a.id, a.admin, a.name, COUNT(b.zbid) users FROM groups a LEFT JOIN users b ON b.gid=a.id

我该如何解决这个问题?我已经知道它肯定是COUNT打破了功能。为什么?好吧,如果我尝试以下内容:

SELECT a.id, a.admin, a.name, IF(ISNULL(b.zbid), 0, 1) users FROM groups a LEFT JOIN users b ON b.gid=a.id WHERE a.cid='1'

然后不会省略任何行,并且对于具有相应用户的任何行,它将显示users = 1,否则为0。但是,如果我将其更改为:

SELECT a.id, a.admin, a.name, IF(ISNULL(b.zbid), 0, COUNT(b.zbid)) users FROM groups a LEFT JOIN users b ON b.gid=a.id WHERE a.cid='1'

然后再次省略行......

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:2)

这是您的第一个查询:

SELECT a.id, a.admin, a.name, COUNT(b.zbid) as users
FROM groups a LEFT JOIN
     users b
ON b.gid = a.id;

您需要添加group by,例如group by a.id来获取所有群组的计数。

我怀疑缺少group by是您面临的问题。