Kieron606
Kieron606

Reputation: 613

Include zeros in SQL count query?

I want to be able to return 0 when I am doing a count, I'd preferably not use joins as my query doesn't use them.

This is my query.

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')

What it does is counts the amount of times a user has logged into the website. It doesn't count zeros though where as I want to know when there has been no log ins.

Upvotes: 4

Views: 90

Answers (3)

sagi
sagi

Reputation: 40491

Please try using explicit join in the future, more readable and will make you avoid this errors. What you need is a left join:

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')

Upvotes: 4

Venkatesh Panabaka
Venkatesh Panabaka

Reputation: 2154

I think below SQL useful to you. 2015-02-10% please remove % symbol in that string.

    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')

Upvotes: 1

Shakeer Mirza
Shakeer Mirza

Reputation: 5110

This might be help you out

    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

Upvotes: 1

Related Questions