问题描述
在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)
方案二
使用MySQL
的DATE_FORMAT
函数,如下:
SELECT COUNT(id)
FROM stats
WHERE record_date.YEAR = 2009
GROUP BY DATE_FORMAT(record_date, '%Y%m')
方案三
使用MySQL
的EXTRACT
函数,如下:
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)
相比之下,版本二的性能更好,查询速度更快。
方案五
使用MySQL
的DAYOFMONTH
函数,如下:
SELECT COUNT(id)
FROM stats
GROUP BY DAYOFMONTH(record_date)
版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。
发表评论
登录用户才能发表评论, 请 登 录 或者 注册