在MySQL中,如果LEFT JOIN不匹配,我如何计算零?

时间:2017-04-04 18:51:24

标签: mysql count left-join

我正在使用MySql 5.5.37。我有一个查询用于计算用户登录的次数

select u.id, IFNULL(count(*), 0) 
FROM user u left join logins l 
on u.id = l.user_id group by u.id;

问题是,如果用户从未登录过,上面仍然为该用户返回一个计数,可能是因为当没有匹配的行时LEFT JOIN返回NULL。我如何更改此项,以便在用户从未登录时获得零,然后在至少登录一次后获得相应的计数?

3 个答案:

答案 0 :(得分:7)

您可以在右表的其中一列上使用count。

select u.id,
    count(l.user_id)
from user u
left join logins l on u.id = l.user_id
group by u.id

答案 1 :(得分:1)

在左侧关节中,当用户从未在结果中登录l.user_id = null时,请尝试这样做:

select 
    u.id,
    sum(if(l.user_id is not null,1,0)) 
FROM user u left join logins l on u.id = l.user_id group by u.id;

答案 2 :(得分:0)

反转计数

select u.id, count(IFNULL(l.user_id , 0) )
FROM user u 
left join logins l on u.id = l.user_id 
group by u.id;