У меня есть упомянутый sql-запрос ниже, который дает мне простой счет на эту дату, или если я использую where
и and
условие даты, оно дает мне консолидированный счет между датой.
select count(*) from A where date(date_1) = '2017-06-01';
Я хочу подсчитать количество дней для отдельного счета для каждой даты.
select count(*) from A where date(date_1) >= '2017-06-01' and date(date_1)<='2017-06-30';
Desired output:
Date Count
2017-06-01 25
2017-06-02 20
2017-06-03 15
- -
- -
2017-06-30 10
Возможно, что-то вроде следующего:
SELECT DATE(date_1), COUNT(*)
FROM A
GROUP BY DATE(date_1)
COUNT
, являясь агрегированной функцией, часто сочетается с предложением GROUP BY
, чтобы получить агрегированные результаты для каждой группы (в данном случае - количество в день).
WHERE
могут быть добавлены, по желанию, непосредственно перед предложением GROUP BY
.
Все, что вам нужно, это использовать предложение group by
:
SELECT date(date_1),Count(*) as [Count]
FROM A
WHERE date(date_1) >= '2017-06-01' and date(date_1)<='2017-06-30'
GROUP BY date(date_1)
Следующее решение также сообщает дни без каких-либо инцидентов. Пример разработан в феврале:
SELECT (DATE'2018-01-31' + INTERVAL x.n DAY) dd
, COALESCE(sqt.c, 0) incidents
FROM (select 1 n union all select 2 n union all select 3 n union all select 4 n union all select 5 n union all select 6 n union all select 7 n union all select 8 n union all select 9 n union all select 10 n union all select 11 n union all select 12 n union all select 13 n union all select 14 n union all select 15 n union all select 16 n union all select 17 n union all select 18 n union all select 19 n union all select 20 n union all select 21 n union all select 22 n union all select 23 n union all select 24 n union all select 25 n union all select 26 n union all select 27 n union all select 28 n) x
LEFT JOIN (
SELECT date1 d
, count(*) c
FROM t
GROUP BY date1
) sqt
ON sqt.d = (DATE'2018-01-31' + INTERVAL x.n DAY)
;
Отдельную демонстрацию можно посмотреть здесь.
Генератор последовательности был бессовестно принят из этого SO-ответа.
GROUP BY
.