mysql 数据分析如何实现日报、周报、月报和年报?

mysql 数据分析如何实现日报、周报、月报和年报?

游戏|数码彩彩2024-03-31 7:43:03314A+A-



以天为统计周期,是常见需求。周报、月报更是常见需求。长周期项目,甚至有年报需求。我已经掌握了MySQL中按天统计,如何实现按年、按月、按周统计呢?

1、已掌握的技能:按天统计

实现以天为统计周期很简单。具体来说,date() 函数可返回时间数据的日期,即仅有年月日,没有时分秒信息。结合 group by 可实现按天统计。

以天为统计周期的数据指标非常多,随便举例,比如每日新增注册用户数。

select
 date(created_at) as 注册日期,
 count(user_id) as 用户数
from
 users
group by
 注册日期
order by
 注册日期
mysql 数据分析如何实现日报、周报、月报和年报?

 

2、从已知推理,拓展技能

既然date()函数可用,那么是否有对应的 year、month、week 等函数可用呢?这纯属我的推理,那试试看吧。

mysql 数据分析如何实现日报、周报、月报和年报?

 

果然可行。但美中不足的是,返回的周数和月数不带年份。当数据量跨年时,它会把每年相同周数或月数的数据加在一起。如何实现某年某月和某年某周呢?已有知识储备去推理,没找到答案,那就直接搜索吧!

3、搜索找答案

经过搜索和尝试发现,在mysql中用date_format(column_name,'%Y-%m')来代替month()就能拿到年月值。

mysql 数据分析如何实现日报、周报、月报和年报?

 

如果把其中代表月month的关键字m换成周week呢?试试看。分别尝试:

date_format(column_name,'%Y-%w') 和 date_format(column_name,'%Y-%W')。
mysql 数据分析如何实现日报、周报、月报和年报?

 

数据返回结果不对呀?并不是预期的今年第几周。小写的w返回的是本周第几天,大写的W返回的是周几的英文名。如何拿到今年第几周这个值,实现周报的统计周期呢?

4、觉察知识点欠缺,查漏补缺

我自学编程时,很喜欢从已知去推理,拓展自己的技能。通常推理能带来惊喜,当推理不够用时,那就搜索大法好。搜索特定问题的答案时,通常也能发现某块知识不足。比如我这里我就意识到自己不熟悉表达日期的关键字或常用语法。

恰好搜索时遇到相濡以沫66的文章,里面有很好的整理。

MySQL日期格式化(format)取值范围。

mysql 数据分析如何实现日报、周报、月报和年报?

 


mysql 数据分析如何实现日报、周报、月报和年报?

 

把单个知识点,稍微提升到某块知识点,能让自己的知识技能再上一个台阶。

5、求助也是社交,问人附红包

上述表格相当实用,但依然没有解决如何获得“某年第几周”的需求。

虽然说主动检索找到答案,是很好的习惯。但自己耗费大量时间也没找到答案,又恰恰有目标相同的人一起互助,何不问问人看呢?学习么,本质上是个社交行为。在学一样技能时,我喜欢泡几个氛围好的学习群。经常在群里分享自己的心得笔记,也会主动力所能及地帮助别人,或者提出自己的疑问引发探讨。求助就是一种很好的社交行为啊。

此时我把疑问丢到编程学习群,并附上红包请教。经指点很快得到答案,用到了concat()函数来拼接。

mysql 数据分析如何实现日报、周报、月报和年报?

 

方便大家拷贝学习,放一下代码吧:

select
 concat(date_format(created_at,'%Y-'),week(created_at)) as 年周,
 count(user_id) as 用户数
from
 users
group by
 年周
order by
 年周

6、小结

总结一下,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 年周

这篇笔记除了知识点,我也放了自己探索扩展技能的思路。是否对你有启发呢?如果有,记得留言或点赞告诉我,鼓励我多多分享。

特别申明:这篇笔记图中数据为本地数据库,仅供本人练习使用,并非任何产品网站的正式数据。

原文链接:https://juejin.im/post/5db1245fe51d452a3c6c9ffe

点击这里复制本文地址 版权声明:本文内容由网友提供,该文观点仅代表作者本人。本站(https://www.angyang.net.cn)仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。

昂扬百科 © All Rights Reserved.  渝ICP备2023000803号-3网赚杂谈