Got this table containing info about customers, dates and their purchases values. Let’s say some of them bought something in November but nothing in December. Now, I am trying to have all the customers + all they spent and to use IFNULL() to the ones that have not bought anything in Dec. I am filtering it for Dec and all I get is the ones that purchased something in Dec, yeah… I know but I am sure there’s a way how to do that but I just can’t figure it out. Any help is more than welcome. Cheers
Customers Date Spent
John1 2000-11-01 12
John2 2000-11-02 33
John3 2000-11-03 13
John4 2000-11-04 24
John5 2000-11-05 36
John6 2000-12-01 55
John7 2000-12-02 16
John8 2000-12-04 33
John9 2000-12-03 18
John10 2000-12-03 13
Advertisement
Answer
You can enumerate the customers in a subquery, then bring the december records with a left join
:
select c.customers, coalesce(sum(t.spent), 0) total_spent
from (select distinct customers from mytable) c
left join mytable t
on t.customers = c.customers
and t.date >= '2000-12-01'
and t.date < '2001-01-01'
group by c.customers
This gives you one row per customer, with their total spent
in December 2000 – or 0
if they did not spent during that month.
In a real-life situation, you would typically have a separate table to store the customers, that you would use instead of the subquery.