我有3个表用户(id,name),组(id,name)和users_groups(user_id,group_id)。用户和组具有多对多的关系,因此第三个用于存储用户和组的关系。我想从每组中具有用户数的组中选择所有数据。到目前为止,我想出了这个:
SELECT groups.*, COUNT(users_groups.user_id) AS user_count
FROM groups
LEFT JOIN users_groups ON users_groups.group_id = groups.id
问题是查询结果没有返回任何没有用户的组(users_groups没有任何包含这些组的group_id的记录)。
如果没有该用户的用户,我应该如何创建我的查询以选择所有组并且用户数是多少,还是用户数为0?
答案 0 :(得分:2)
按照
的方式尝试SELECT groups.*
, sum( if (ISNULL(users_groups.user_id),0,1)) AS user_count
FROM groups
LEFT JOIN users_groups
ON users_groups.group_id = groups.id
GROUP BY groups.id
答案 1 :(得分:2)
您只需要添加GROUP BY子句:
SELECT groups.*, COUNT(users_groups.user_id) AS user_count
FROM groups
LEFT JOIN users_groups ON users_groups.group_id = groups.id
GROUP BY groups.id
对于没有相应users_groups记录的每个组,您将获得0的user_count。