mysql周报内容范文_mysql 数据分析如何实现日报、周报、月报和年报?
以天為統(tǒng)計(jì)周期,是常見需求。周報(bào)、月報(bào)更是常見需求。長周期項(xiàng)目,甚至有年報(bào)需求。我已經(jīng)掌握了mysql中按天統(tǒng)計(jì),如何實(shí)現(xiàn)按年、按月、按周統(tǒng)計(jì)呢?
1、已掌握的技能:按天統(tǒng)計(jì)
實(shí)現(xiàn)以天為統(tǒng)計(jì)周期很簡單。具體來說,date() 函數(shù)可返回時(shí)間數(shù)據(jù)的日期,即僅有年月日,沒有時(shí)分秒信息。結(jié)合 group by 可實(shí)現(xiàn)按天統(tǒng)計(jì)。
以天為統(tǒng)計(jì)周期的數(shù)據(jù)指標(biāo)非常多,隨便舉例,比如每日新增注冊用戶數(shù)。
select
date(created_at) as 注冊日期,
count(user_id) as 用戶數(shù)
from
users
group by
注冊日期
order by
注冊日期
2、從已知推理,拓展技能
既然date()函數(shù)可用,那么是否有對應(yīng)的 year、month、week 等函數(shù)可用呢?這純屬我的推理,那試試看吧。
果然可行。但美中不足的是,返回的周數(shù)和月數(shù)不帶年份。當(dāng)數(shù)據(jù)量跨年時(shí),它會(huì)把每年相同周數(shù)或月數(shù)的數(shù)據(jù)加在一起。如何實(shí)現(xiàn)某年某月和某年某周呢?已有知識儲備去推理,沒找到答案,那就直接搜索吧!
3、搜索找答案
經(jīng)過搜索和嘗試發(fā)現(xiàn),在mysql中用date_format(column_name,'%Y-%m')來代替month()就能拿到年月值。
如果把其中代表月month的關(guān)鍵字m換成周week呢?試試看。分別嘗試:
date_format(column_name,'%Y-%w') 和 date_format(column_name,'%Y-%W')。
數(shù)據(jù)返回結(jié)果不對呀?并不是預(yù)期的今年第幾周。小寫的w返回的是本周第幾天,大寫的W返回的是周幾的英文名。如何拿到今年第幾周這個(gè)值,實(shí)現(xiàn)周報(bào)的統(tǒng)計(jì)周期呢?
4、覺察知識點(diǎn)欠缺,查漏補(bǔ)缺
我自學(xué)編程時(shí),很喜歡從已知去推理,拓展自己的技能。通常推理能帶來驚喜,當(dāng)推理不夠用時(shí),那就搜索大法好。搜索特定問題的答案時(shí),通常也能發(fā)現(xiàn)某塊知識不足。比如我這里我就意識到自己不熟悉表達(dá)日期的關(guān)鍵字或常用語法。
恰好搜索時(shí)遇到相濡以沫66的文章,里面有很好的整理。
MySQL日期格式化(format)取值范圍。
值
含義
秒
%S、%s
兩位數(shù)字形式的秒( 00,01, ..., 59)
分
%I、%i
兩位數(shù)字形式的分( 00,01, ..., 59)
小時(shí)
%H
24小時(shí)制,兩位數(shù)形式小時(shí)(00,01, ...,23)
%h
12小時(shí)制,兩位數(shù)形式小時(shí)(00,01, ...,12)
%k
24小時(shí)制,數(shù)形式小時(shí)(0,1, ...,23)
%l
12小時(shí)制,數(shù)形式小時(shí)(0,1, ...,12)
%T
24小時(shí)制,時(shí)間形式(HH:mm:ss)
%r
12小時(shí)制,時(shí)間形式(hh:mm:ss AM 或 PM)
%p
AM上午或PM下午
周
%W
一周中每一天的名稱(Sunday,Monday, ...,Saturday)
%a
一周中每一天名稱的縮寫(Sun,Mon, ...,Sat)
%w
以數(shù)字形式標(biāo)識周(0=Sunday,1=Monday, ...,6=Saturday)
%U
數(shù)字表示周數(shù),星期天為周中第一天
%u
數(shù)字表示周數(shù),星期一為周中第一天
天
%d
兩位數(shù)字表示月中天數(shù)(01,02, ...,31)
%e
數(shù)字表示月中天數(shù)(1,2, ...,31)
%D
英文后綴表示月中天數(shù)(1st,2nd,3rd ...)
%j
以三位數(shù)字表示年中天數(shù)(001,002, ...,366)
月
%M
英文月名(January,February, ...,December)
%b
英文縮寫月名(Jan,Feb, ...,Dec)
%m
兩位數(shù)字表示月份(01,02, ...,12)
%c
數(shù)字表示月份(1,2, ...,12)
年
%Y
四位數(shù)字表示的年份(2015,2016...)
%y
兩位數(shù)字表示的年份(15,16...)
文字輸出
%文字
直接輸出文字內(nèi)容
把單個(gè)知識點(diǎn),稍微提升到某塊知識點(diǎn),能讓自己的知識技能再上一個(gè)臺階。
5、求助也是社交,問人附紅包
上述表格相當(dāng)實(shí)用,但依然沒有解決如何獲得“某年第幾周”的需求。
雖然說主動(dòng)檢索找到答案,是很好的習(xí)慣。但自己耗費(fèi)大量時(shí)間也沒找到答案,又恰恰有目標(biāo)相同的人一起互助,何不問問人看呢?學(xué)習(xí)么,本質(zhì)上是個(gè)社交行為。在學(xué)一樣技能時(shí),我喜歡泡幾個(gè)氛圍好的學(xué)習(xí)群。經(jīng)常在群里分享自己的心得筆記,也會(huì)主動(dòng)力所能及地幫助別人,或者提出自己的疑問引發(fā)探討。求助就是一種很好的社交行為啊。
此時(shí)我把疑問丟到編程學(xué)習(xí)群,并附上紅包請教。經(jīng)指點(diǎn)很快得到答案,用到了concat()函數(shù)來拼接。
方便大家拷貝學(xué)習(xí),放一下代碼吧:
select
concat(date_format(created_at,'%Y-'),week(created_at)) as 年周,
count(user_id) as 用戶數(shù)
from
users
group by
年周
order by
年周
6、小結(jié)
總結(jié)一下,mysql中可通過date_format() 和 concat(),week()等函數(shù)可完成數(shù)據(jù)分析中常用的月報(bào)、周報(bào)中按月、周統(tǒng)計(jì)的需求。關(guān)鍵語句為:
date(column_name) as 年月日
date_format(column_name,'%Y-%m') as 年月
concat(date_format(column_name,'%Y-'),week(column_name) as 年周
這篇筆記除了知識點(diǎn),我也放了自己探索擴(kuò)展技能的思路。是否對你有啟發(fā)呢?如果有,記得留言或點(diǎn)贊告訴我,鼓勵(lì)我多多分享。
特別申明:這篇筆記圖中數(shù)據(jù)為本地?cái)?shù)據(jù)庫,僅供本人練習(xí)使用,并非任何產(chǎn)品網(wǎng)站的正式數(shù)據(jù)。
總結(jié)
以上是生活随笔為你收集整理的mysql周报内容范文_mysql 数据分析如何实现日报、周报、月报和年报?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《嵌入式系统设计师》笔记之一——嵌入式系
- 下一篇: 程序开发语言之兵器谱排名