我有下面提到的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
答案 0 :(得分:2)
您只需要使用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)
答案 1 :(得分:1)
以下内容可能有效:
SELECT DATE(date_1), COUNT(*)
FROM A
GROUP BY DATE(date_1)
作为aggregate function的 COUNT
通常与GROUP BY
子句结合使用,以便获得每个组的汇总结果(在这种情况下,每个日期的计数)。
WHERE
条款当然可以根据需要添加到GROUP BY
子句之前。
答案 2 :(得分: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)
;
可以查看独立演示here。
序列生成器已被无耻地从this SO answer采用。