如何统计food表中指定日期区间内每年的过期食品数量
你写的SQL仅完成了符合时间范围的记录筛选,没有做按年份分组聚合的操作,因此只能返回明细记录,无法得到按年统计的计数结果。
正确SQL写法(MySQL环境为例,列名含空格需用反引号包裹)
SELECT YEAR(`Expire date`), COUNT(*) FROM food WHERE `Expire date` BETWEEN '2010-01-01' AND '2013-12-30' GROUP BY YEAR(`Expire date`) ORDER BY YEAR(`Expire date`);
如果使用SQL Server,列名用方括号包裹即可:
SELECT YEAR([Expire date]), COUNT(*) FROM food WHERE [Expire date] BETWEEN '2010-01-01' AND '2013-12-30' GROUP BY YEAR([Expire date]) ORDER BY YEAR([Expire date]);
逻辑说明
- 用
YEAR()函数从过期日期字段提取年份值 - 用
COUNT(*)统计每个年份对应的食品总数量 GROUP BY按提取的年份做分组,聚合计算每个分组的计数ORDER BY保证输出结果按年份升序排列,和预期输出顺序一致
如果你的Expire date字段存储的是字符串格式而非日期格式,需要先转换为日期类型再做计算,以MySQL为例:
SELECT YEAR(STR_TO_DATE(`Expire date`, '%Y-%m-%d')), COUNT(*) FROM food WHERE STR_TO_DATE(`Expire date`, '%Y-%m-%d') BETWEEN '2010-01-01' AND '2013-12-30' GROUP BY YEAR(STR_TO_DATE(`Expire date`, '%Y-%m-%d')) ORDER BY 1;
内容的提问来源于stack exchange,提问作者roz na
相关产品推荐
相关产品推荐

