我的问题似乎有一个简单的解决方案,但我无法实现。
我有一个选择加入两个表:users
和login_log
。我需要向每个用户显示他有多少次登录(包括那些尚未登录的登录),所以我在用户表上做了right join
。
这是我的选择:
select users.id,count(*)
from login_log
right join users on login_log.user_id=users.id
group by users.id
问题是对于在login_log表中没有条目的用户,select会将count(*)
的值显示为1,但它显示为0(或null);
结果如下:
user_id | count
----------------
73 4
59 2
47 1
3 1
61 1
67 1 (suppose to be 0)
14 1 (suppose to be 0)
46 1 (suppose to be 0)
任何帮助将不胜感激。 感谢
答案 0 :(得分:2)
你需要计算一些可选的东西(即表中可能有或没有条目的东西),而不是整行。例如;
select users.id,count(login_log.user_id)
from login_log
right join users on login_log.user_id=users.id
group by users.id
原因是查询为每个用户提供至少一行,因此COUNT(*)
- 计算行数 - 将始终至少返回1.