首页 / MySQL / 正文

[MySQL]MySQL数据库中如何统计一段时间内以某个字段分组的年/月总数?

5769 发布于: 2018-04-23 读完约需3分钟

问题描述

MySQL数据库中,如何统计一段时间内以某个字段分组的年/月总数。假如有一个TIMESTAMP类型的字段record_date,和MySQL查询的伪代码,如下:

SELECT COUNT(id)
FROM stats
WHERE record_date.YEAR = 2009
GROUP BY record_date.YEAR

或者,按照年/月进行分组统计的伪代码,如下:

SELECT COUNT(id)
FROM stats
GROUP BY record_date.YEAR, record_date.MONTH

MySQL数据库中,如何实现以上伪代码的按年,月的分组统计呢?

方案一

SELECT COUNT(id)
FROM stats
WHERE record_date.YEAR = 2009
GROUP BY YEAR(record_date), MONTH(record_date)

方案二

使用MySQLDATE_FORMAT函数,如下:

SELECT COUNT(id)
FROM stats
WHERE record_date.YEAR = 2009
GROUP BY DATE_FORMAT(record_date, '%Y%m')

方案三

使用MySQLEXTRACT函数,如下:

SELECT COUNT(id)
FROM stats
GROUP BY EXTRACT(YEAR_MONTH FROM record_date)

方案四

如果你的MySQL数据库中的数据已经很多了,那么建议:

版本一:

SELECT SQL_NO_CACHE YEAR(record_date), MONTH(record_date), COUNT(*)
FROM stats
GROUP BY DATE_FORMAT(record_date, '%Y%m')

或者

版本二:

SELECT SQL_NO_CACHE YEAR(record_date), MONTH(record_date), COUNT(*)
FROM stats
GROUP BY YEAR(record_date)*100 + MONTH(record_date)

相比之下,版本二的性能更好,查询速度更快。

方案五

使用MySQLDAYOFMONTH函数,如下:

 SELECT COUNT(id)
 FROM stats
 GROUP BY DAYOFMONTH(record_date)

版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。

上一篇: [LINQ].NET/C#应用程序开发中如何使用LINQ查询集合中元素的某个属性值在另外一个集合中存在的子集?

下一篇: [MySQL]MySQL数据库中如何查询出某个数据表中某个指定列的重复的记录?

本文永久链接码友网 » [MySQL]MySQL数据库中如何统计一段时间内以某个字段分组的年/月总数?

分享扩散:

发表评论

登录用户才能发表评论, 请 登 录 或者 注册