У меня есть таблица заданий, и я пытаюсь получить количество заданий для разных временных рамок. Мой текущий запрос выглядит следующим образом:Выбор количества нулей при группировке по столбцу
SELECT COUNT(*) AS 'count',
WEEK(j.created_at) AS 'week',
MONTH(j.created_at) AS 'month',
YEAR(j.created_at) AS 'year',
DATE_FORMAT(j.created_at, '%y') AS 'short_year'
FROM jobs j WHERE j.state <> 'draft'
AND created_at > '2010-06-21'
AND created_at < '2010-08-01'
GROUP BY WEEK(j.created_at)
ORDER BY WEEK(j.created_at)
Чтобы изменить временные рамки, я просто изменить GROUP BY
от WEEK
к MONTH
, и я получаю отсчеты в месяц вместо недели.
Проблема в том, что я не получаю пустые строки в течение недель с 0 заданиями. Мой набор результатов из запроса выше:
count week month year short_year
3 25 6 2010 10
2 26 6 2010 10
2 27 7 2010 10
1 28 7 2010 10
3 30 7 2010 10
Вы заметите, что нет данных для 29 недели, которая должна быть строка со счетом (0). Есть ли способ получить эту строку 0 count, сохраняя при этом гибкость изменения моей группировки между WEEK
и MONTH
?
Мы не имеют календарную таблицу с данными, как это, и создание одного потребует значительных изменений в структуре данных приложения, которые у меня нет времени для реализации. Если я изменил все ваши 'c.date' на' c.created_at' и использовал 'jobs' вместо' calendar', он возвращает тот же набор данных, что и мой исходный запрос. –
Сначала необходимо создать ** вспомогательную таблицу календаря. –
См. Мой измененный комментарий выше. Это потребует значительных изменений в приложении Rails, обслуживающих эти данные, и у меня нет времени для реализации этих изменений. –