在SQL计数查询中包含零?

时间:2016-02-10 09:48:48

标签: mysql

我希望能够在进行计数时返回0,我最好不要使用连接,因为我的查询不使用它们。

这是我的疑问。

SELECT count( user_id ) as agencyLogins, 
      DATE_FORMAT(login_date, '%Y-%m-%d') as date 
FROM logins, users 
WHERE login_date >= '2015-02-10%' AND login_date < '2016-02-11%' 
AND logins.user_id = users.id 
GROUP BY DATE_FORMAT(login_date,'%Y-%m-%d')

它的作用是计算用户登录网站的次数。 它虽然没有登录,但我不知道在哪里可以知道。

3 个答案:

答案 0 :(得分:4)

请在将来尝试使用显式联接,更具可读性,并避免此错误。你需要的是一个左连接:

SELECT t.id,count(s.user_id) as agencyLogins, DATE_FORMAT(s.login_date, '%Y-%m-%d') as date
FROM users t
LEFT OUTER JOIN login s
ON(t.id = s.user_id)
WHERE (s.login_date >= '2015-02-10%' AND s.login_date < '2016-02-11%') or (s.user_id is null)
GROUP BY t.id,DATE_FORMAT(s.login_date,'%Y-%m-%d')

答案 1 :(得分:1)

我认为下面的SQL对你有用。 2015-02-10%请删除该字符串中的%符号。

    SELECT IF(COUNT(user_id) IS NULL,'0',COUNT(user_id)) as agencyLogins, DATE_FORMAT(login_date, '%Y-%m-%d') as date FROM users left join logins on logins.user_id = users.id 
    WHERE date(login_date) >= date('2015-02-10') AND date(login_date) <= date('2016-02-11')
GROUP BY DATE_FORMAT(login_date,'%Y-%m-%d')

答案 2 :(得分:1)

这可能会帮助你

    SELECT SUM(agencyLogins), date FROM (
    SELECT count( user_id ) as agencyLogins, 
          DATE_FORMAT(login_date, '%Y-%m-%d') as date 
    FROM logins, users 
    WHERE login_date >= '2015-02-10%' AND login_date < '2016-02-11%' 
    AND logins.user_id = users.id 
    GROUP BY DATE_FORMAT(login_date,'%Y-%m-%d')


    UNION ALL

    SELECT 0,''
    ) AS A 
    GROUP BY DATE