2013-12-19 5 views
0

Я имею проблемы с этим запросом:MySQL Query группировать по диапазону дат

SELECT 
    YEAR(passDate) as Year, 
    count(*) AS total_amount 
FROM 
    `dsp_drop_pass_details` 
WHERE passDate 
    BETWEEN '2009-01-01' 
    AND '2012-05-01' 
    AND batch='DROPOUT' 
GROUP BY YEAR(passDate) 
ORDER BY YEAR(passDate) 

выход ---

Month  total amount 
2011    30 
2012    20 

Но мое желание из пут

Month total amount 
2009   0 
2010   0 
2011   40 
2012   20 

Я хочу 0, где счет 0

ответ

0

Самый простой способ wo Ульд должен иметь столы Годы, со всеми желаемыми годами.

create table Years(yearValue int); 

insert into years values (2001), (2002)..., (2020); 

затем выполните левое соединение на вашем фактическом столе.

SELECT y.yearValue, COALESCE(COUNT(d.id), 0) --assumning you have a field id in dsp_drop_pass_details 
FROM years y 
LEFT join dsp_drop_pass_details d on y.yearValue = YEAR(d.passDate) 
WHERE y.yearValue between 2009 and 2012 
GROUP BY y.yearValue 
ORDER BY y.yearValue; 
Смежные вопросы