如何通过Mysql实现日报、周报、月报和年报?
以天为统计周期,是常见需求。周报、月报更是常见需求。长周期项目,甚至有年报需求。
1、按天统计
实现以天为统计周期很简单。具体来说, ` date() ` 函数可返回时间数据的日期,即仅有年月日,没有时分秒信息。结合 ` group by ` 可实现按天统计。
以天为统计周期的数据指标非常多,随便举例,比如每日新增注册用户数。
select
date(created_at) as 注册日期,
count(user_id) as 用户数
from
users
group by
注册日期
order by
注册日期
2、其它维度统计
既然 ` date() ` 函数可用,那么是否有对应的 ` year ` 、 ` month ` 、 ` week `
等函数可用呢?这纯属我的推理,那试试看吧。
果然可行。但美中不足的是,返回的周数和月数不带年份。当数据量跨年时,它会把每年相同周数或月数的数据加在一起。如何实现 ` 某年某月 ` 和 ` 某年某周 `呢?
在mysql中用 ` date_format(column_name,'%Y-%m') ` 来代替 ` month() ` 就能拿到 `年月 ` 值。
如果把其中代表月month的关键字 ` m ` 换成周week呢?试试看。分别尝试:
` date_format(column_name,'%Y-%w') ` 和 ` date_format(column_name,'%Y-%W') ` 。
数据返回结果不对呀?并不是预期的今年第几周。小写的 ` w ` 返回的是本周第几天,大写的 ` W ` 返回的是周几的英文名。如何拿到 ` 今年第几周 ` 这个值,实现周报的统计周期呢?
再用上 ` concat( ) ` 拼接函数
select
concat(date_format(created_at,'%Y-'),week(created_at)) as 年周,
count(user_id) as 用户数
from
users
group by
年周
order by
年周
小结
总结一下,mysql中可通过 ` date_format() ` 和 ` concat() ` , ` week() `
等函数可完成数据分析中常用的月报、周报中按月、周统计的需求。关键语句为:
date(column_name) as 年月日
date_format(column_name,'%Y-%m') as 年月
concat(date_format(column_name,'%Y-'),week(column_name) as 年周
-完-
是否对你有启发呢?如果有,记得留言或点赞告诉我,鼓励我多多分享。