2016-01-23 3 views
0

У меня есть запрос, как этотMySQL рассчитывать с условием диапазона

select newscategory.CategoryName, count(distinct newsmain.id) 
from newsmain join newscategory on 
newscategory.CategoryName = newsmain.Category 
group by CategoryName 

и возвращает правильный результат, как это:

CategoryName count(distinct newsmain.id) 
Acupunctura 1 
Neurologie 1 
Test Category 2 

«newsmain» таблица имеет «AppPublished» Дата и время и что я пытаюсь сделать, это добавить условие к счету, которое будет делать подсчет, основанный на том, что «AppPublished» находится в диапазоне двух переменных datetime. Для примера, я должен был бы результат, как этот:

CategoryName count(distinct newsmain.id) 
Acupunctura 0 
Neurologie 0 
Test Category 1 

мне нужно сделать подзапрос или есть способ добавить условие этого запроса делать?

Поскольку любые дополнительные условия в этом запросе приводят к нежелательной фильтрации столбца «CategoryName».

ответ

1

Вы можете использовать CASE условие как

select newscategory.CategoryName, 
count(CASE WHEN AppPublished BETWEEN date1 and date2 THEN distinct newsmain.id END) 
from newsmain join newscategory on 
newscategory.CategoryName = newsmain.Category 
group by CategoryName 

(OR), как этот

select newscategory.CategoryName, 
sum(CASE WHEN AppPublished BETWEEN date1 and date2 THEN 1 ELSE 0 END) 
from newsmain join newscategory on 
newscategory.CategoryName = newsmain.Category 
group by CategoryName 
+0

Второе решение работал как шарм, спасибо. –

Смежные вопросы