PostgreSQL正确加入group by

时间:2013-07-26 11:52:49

标签: sql postgresql

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

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

1 个答案:

答案 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.