Счетчик и группа по дате должны возвращать 0 при отсутствии значений - PullRequest
3 голосов
/ 01 декабря 2010

Я пытаюсь сообщить количество интервью, которые мы провели за день.

Итак, у меня есть таблица интервью такие как

interviewid, staffid, дата, комментарии ...

и справочная таблица дат, содержащая все даты с 2005 по 2020 г. с одним полем даты с именем ref.

Мой запрос:

SELECT count(*) as cnt FROM `interviews` 
right JOIN `dateRef` ON `date` = ref where type = 2 
and date > date_sub(now(),interval 7 day) group by date_format(ref,'%Y-%m-%d')

Хорошо работает, чтобы показать интервью, которое мы сделали, но не тогда, когда мы не давали никаких интервью ...

Например, это возвращает:

1
2
4

Но он должен вернуться

0
1
0
2
0
4
0

EDIT:

Очевидно, что проблема возникает из предложения where, потому что, если я его удалю, запрос будет работать нормально ...

Ответы [ 2 ]

3 голосов
/ 01 декабря 2010

попробуйте заменить на

right join

вместо

left join

другое изменение

where type = 2 

на

where type = 2 OR type IS NULL

ТАК окончательныйзапрос

SELECT count(*) as cnt FROM `interviews` 
right JOIN `dateRef` ON `date` = ref where (type = 2 OR type is null)
and date > date_sub(now(),interval 7 day) group by date_format(ref,'%Y-%m-%d')
0 голосов
/ 01 декабря 2010

Если я вас правильно понимаю, type - это колонка интервью. Ваша объединенная таблица содержит строки для дат без интервью, поскольку вы используете правильное объединение, но в этих столбцах есть NULL в столбце type (и в любом другом столбце interviews), поскольку в этих датах нет записей для этих дат. interviews стол. Они отфильтрованы вашим предложением WHERE, для которого требуется type=2, поэтому COUNT не видит их.

Вы можете попробовать что-то вроде WHERE (type=2 OR type IS NULL), по крайней мере, если interviews.type никогда не будет NULL.

...