MySql按時(shí),天,周,月進(jìn)行數(shù)據(jù)統(tǒng)計(jì)
前言
最近遇到一個(gè)統(tǒng)計(jì)的需求場(chǎng)景,針對(duì)db中的數(shù)據(jù),看一下每天的數(shù)據(jù)量情況,由于DB中時(shí)間字段采用的是int存的時(shí)間戳,所以最開始想到的是直接對(duì)時(shí)間進(jìn)行按天取整,然后再Group統(tǒng)計(jì)數(shù)據(jù);
除此之外,使用DATE_FORMAT函數(shù)來(lái)處理可能是更簡(jiǎn)潔的方法了,下面分別介紹下兩種方式
1. 時(shí)間取整方式
假設(shè)現(xiàn)在有一個(gè)user表,其中create_time 為 int類型的時(shí)間戳,此時(shí)我們需要統(tǒng)計(jì)每天的新增用戶數(shù),第一種方式就是將create_time轉(zhuǎn)換為天為單位的整數(shù),然后group分組之后計(jì)數(shù)即可
對(duì)應(yīng)的sql如下;
select floor(create_time / 86400) as c, count(*) from `user` group by c
使用上面這種方式雖然可以統(tǒng)計(jì)出結(jié)果,但是顯示并不友好,如上面這個(gè)c實(shí)際上是距離標(biāo)準(zhǔn)起始時(shí)間過(guò)去的天數(shù);無(wú)法直觀看到每天的數(shù)量情況
2. data_format方式
接下來(lái)再介紹一下根據(jù)日期格式化這個(gè)函數(shù)來(lái)實(shí)現(xiàn)數(shù)據(jù)統(tǒng)計(jì)
函數(shù)說(shuō)明
這個(gè)函數(shù)通常接收兩個(gè)參數(shù),使用姿勢(shì)形如
DATE_FORMAT(date,format)
- date: 日期
- format: 規(guī)定日期/時(shí)間的輸出格式
注意上面的date,要求是日期格式,可我們現(xiàn)在的數(shù)據(jù)是int類型,怎么整?
先通過(guò)from_unixtime函數(shù)來(lái)轉(zhuǎn)換為日期,然后再使用data_format來(lái)格式化分組,這樣就可行了
比如按天統(tǒng)計(jì)的sql可以如下:
select date_format(from_unixtime(create_time), '%Y-%m-%d') today, count(*) as cnt from user group by today
返回結(jié)果形如:
| today | cnt |
|---|---|
| 2022-07-02 | 6 |
| 2022-07-03 | 4 |
| 2022-07-04 | 4 |
| 2022-07-05 | 3 |
| 2022-07-06 | 2 |
| 2022-07-07 | 1 |
如果需要按周統(tǒng)計(jì),也很方便,將format改成 %Y-%u
select date_format(from_unixtime(create_time), '%Y-%u') today, count(*) as cnt from user group by today
返回結(jié)果形如:
| today | cnt |
|---|---|
| 2022-22 | 27 |
| 2022-23 | 52 |
| 2022-24 | 28 |
| 2022-25 | 33 |
| 2022-26 | 39 |
| 2022-27 | 10 |
同樣按年統(tǒng)計(jì),則將format改成%Y即可
下面給出format對(duì)應(yīng)的取值說(shuō)明:
| 格式 | 描述 |
|---|---|
| %a | 縮寫星期名 |
| %b | 縮寫月名 |
| %c | 月,數(shù)值 |
| %D | 帶有英文前綴的月中的天 |
| %d | 月的天,數(shù)值(00-31) |
| %e | 月的天,數(shù)值(0-31) |
| %f | 微秒 |
| %H | 小時(shí) (00-23) |
| %h | 小時(shí) (01-12) |
| %I | 小時(shí) (01-12) |
| %i | 分鐘,數(shù)值(00-59) |
| %j | 年的天 (001-366) |
| %k | 小時(shí) (0-23) |
| %l | 小時(shí) (1-12) |
| %M | 月名 |
| %m | 月,數(shù)值(00-12) |
| %p | AM 或 PM |
| %r | 時(shí)間,12-小時(shí)(hh:mm:ss AM 或 PM) |
| %S | 秒(00-59) |
| %s | 秒(00-59) |
| %T 時(shí)間 | 24-小時(shí) (hh:mm:ss) |
| %U | 周 (00-53) 星期日是一周的第一天 |
| %u | 周 (00-53) 星期一是一周的第一天 |
| %V | 周 (01-53) 星期日是一周的第一天,與 %X 使用 |
| %v | 周 (01-53) 星期一是一周的第一天,與 %x 使用 |
| %W | 星期名 |
| %w 周的天 (0=星期日 | 6=星期六) |
| %X | 年,其中的星期日是周的第一天,4 位,與 %V 使用 |
| %x | 年,其中的星期一是周的第一天,4 位,與 %v 使用 |
| %Y | 年,4 位 |
| %y | 年,2 位 |
到此這篇關(guān)于MySql按時(shí),天,周,月進(jìn)行數(shù)據(jù)統(tǒng)計(jì)的文章就介紹到這了,更多相關(guān)MySql數(shù)據(jù)統(tǒng)計(jì)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- php、mysql查詢當(dāng)天,查詢本周,查詢本月的數(shù)據(jù)實(shí)例(字段是時(shí)間戳)
- mysql中獲取一天、一周、一月時(shí)間數(shù)據(jù)的各種sql語(yǔ)句寫法
- MySQL如何統(tǒng)計(jì)一個(gè)數(shù)據(jù)庫(kù)所有表的數(shù)據(jù)量
- mysql聚合統(tǒng)計(jì)數(shù)據(jù)查詢緩慢的優(yōu)化方法
- laravel實(shí)現(xiàn)按月或天或小時(shí)統(tǒng)計(jì)mysql數(shù)據(jù)的方法
- 詳解mysql 獲取某個(gè)時(shí)間段每一天、每一個(gè)小時(shí)的統(tǒng)計(jì)數(shù)據(jù)
- mysql按照天統(tǒng)計(jì)報(bào)表當(dāng)天沒有數(shù)據(jù)填0的實(shí)現(xiàn)代碼
- mysql 獲取規(guī)定時(shí)間段內(nèi)的統(tǒng)計(jì)數(shù)據(jù)
相關(guān)文章
mysql修改數(shù)據(jù)庫(kù)編碼(數(shù)據(jù)庫(kù)字符集)和表的字符編碼的方法
Mysql數(shù)據(jù)庫(kù)是一個(gè)開源的數(shù)據(jù)庫(kù),應(yīng)用非常廣泛。以下是修改mysql數(shù)據(jù)庫(kù)的字符編碼的操作過(guò)程和將表的字符編碼轉(zhuǎn)換成utf-8的方法,需要的朋友可以參考下2014-03-03
MySQL主從同步設(shè)置中主服務(wù)器二進(jìn)制日志無(wú)法開啟的問題
這篇文章主要介紹了MySQL主從同步設(shè)置中主服務(wù)器二進(jìn)制日志無(wú)法開啟的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12
driver-class-name:?com.mysql.jdbc.Driver爆紅的問題解決
在springboot項(xiàng)目工程中想要進(jìn)行數(shù)據(jù)庫(kù)配置,driver-class-name:?com.mysql.cj.jdbc.Driver始終報(bào)錯(cuò),本文就來(lái)介紹一下如何解決,感興趣的可以了解一下2024-07-07
一文帶你了解MySQL之事務(wù)隔離級(jí)別和MVCC
這篇文章主要帶大家詳細(xì)了解一下MySQL之事務(wù)隔離級(jí)別和MVCC,文中有詳細(xì)的代碼示例,具有一定的參考價(jià)值,感興趣的同學(xué)可以借鑒月u的2023-06-06
MySQL8.0服務(wù)無(wú)法正常啟動(dòng)的解決過(guò)程
這篇文章主要介紹了MySQL8.0服務(wù)無(wú)法正常啟動(dòng)的解決過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12
Python MySQL進(jìn)行數(shù)據(jù)庫(kù)表變更和查詢
這篇文章主要介紹了Python MySQL進(jìn)行數(shù)據(jù)庫(kù)表變更和查詢的相關(guān)資料,需要的朋友可以參考下2017-05-05
mysql查詢上下級(jí)機(jī)構(gòu)的方法實(shí)例
大家應(yīng)該都知道表里有上下級(jí)機(jī)構(gòu)的,下面這篇文章主要給大家介紹了關(guān)于mysql查詢上下級(jí)機(jī)構(gòu)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-04-04
在Windows主機(jī)上定時(shí)備份遠(yuǎn)程VPS(CentOS)數(shù)據(jù)的批處理
我想在自己的 Windows7 下每天/周運(yùn)行一次備份,就有了這個(gè)小工具2012-05-05
MySQL5.7中 performance和sys schema中的監(jiān)控參數(shù)解釋(推薦)
在MySQL5.7中,performance schema有很大改進(jìn),包括引入大量新加入的監(jiān)控項(xiàng)、降低占用空間和負(fù)載,以及通過(guò)新的sys schema機(jī)制顯著提升易用性。下面通過(guò)本文給大家介紹 MySQL5.7中 performance和sys schema中的監(jiān)控參數(shù)解釋,需要的朋友可以參考下2017-08-08

