首頁 > 軟體

MySql按時,天,周,月進行資料統計

2022-08-14 10:00:51

前言

最近遇到一個統計的需求場景,針對db中的資料,看一下每天的資料量情況,由於DB中時間欄位採用的是int存的時間戳,所以最開始想到的是直接對時間進行按天取整,然後再Group統計資料;

除此之外,使用DATE_FORMAT函數來處理可能是更簡潔的方法了,下面分別介紹下兩種方式

1. 時間取整方式

假設現在有一個user表,其中create_time 為 int型別的時間戳,此時我們需要統計每天的新增使用者數,第一種方式就是將create_time轉換為天為單位的整數,然後group分組之後計數即可

對應的sql如下;

select floor(create_time / 86400) as c, count(*) from `user` group by c

使用上面這種方式雖然可以統計出結果,但是顯示並不友好,如上面這個c實際上是距離標準起始時間過去的天數;無法直觀看到每天的數量情況

2. data_format方式

接下來再介紹一下根據日期格式化這個函數來實現資料統計

函數說明

這個函數通常接收兩個引數,使用姿勢形如

DATE_FORMAT(date,format)
  • date: 日期
  • format: 規定日期/時間的輸出格式

注意上面的date,要求是日期格式,可我們現在的資料是int型別,怎麼整?

先通過from_unixtime函數來轉換為日期,然後再使用data_format來格式化分組,這樣就可行了

比如按天統計的sql可以如下:

select date_format(from_unixtime(create_time), '%Y-%m-%d') today, count(*) as cnt from user group by today

返回結果形如:

todaycnt
2022-07-026
2022-07-034
2022-07-044
2022-07-053
2022-07-062
2022-07-071

如果需要按周統計,也很方便,將format改成 %Y-%u

select date_format(from_unixtime(create_time), '%Y-%u') today, count(*) as cnt from user group by today

返回結果形如:

todaycnt
2022-2227
2022-2352
2022-2428
2022-2533
2022-2639
2022-2710

同樣按年統計,則將format改成%Y即可

下面給出format對應的取值說明:

格式描述
%a縮寫星期名
%b縮寫月名
%c月,數值
%D帶有英文字首的月中的天
%d月的天,數值(00-31)
%e月的天,數值(0-31)
%f微秒
%H小時 (00-23)
%h小時 (01-12)
%I小時 (01-12)
%i分鐘,數值(00-59)
%j年的天 (001-366)
%k小時 (0-23)
%l小時 (1-12)
%M月名
%m月,數值(00-12)
%pAM 或 PM
%r時間,12-小時(hh:mm:ss AM 或 PM)
%S秒(00-59)
%s秒(00-59)
%T 時間24-小時 (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 位

到此這篇關於MySql按時,天,周,月進行資料統計的文章就介紹到這了,更多相關MySql資料統計內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com