0

我的问题似乎有一个简单的解决方案,但我无法解决。我有一个选择加入两个表:userslogin_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 表中没有条目的用户,选择将值显示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)

任何帮助,将不胜感激。谢谢

4

1 回答 1

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 

这样做的原因是查询为每个用户提供了至少一行,因此 a COUNT(*)- 计算行数 - 将始终返回至少 1。

于 2013-07-26T11:54:47.167 回答