最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL按天分組統(tǒng)計(jì)一定時(shí)間內(nèi)的數(shù)據(jù)實(shí)例(沒有數(shù)據(jù)補(bǔ)0)

 更新時(shí)間:2023年03月01日 09:25:02   作者:吃榴蓮不吐葡萄皮  
我們?cè)谟肕ysql制作數(shù)據(jù)可視化圖表時(shí)候,經(jīng)常需要按照天對(duì)數(shù)據(jù)進(jìn)行分組統(tǒng)計(jì),下面這篇文章主要給大家介紹了關(guān)于MySQL按天分組統(tǒng)計(jì)一定時(shí)間內(nèi)的數(shù)據(jù),沒有數(shù)據(jù)補(bǔ)0的相關(guān)資料,需要的朋友可以參考下

簡(jiǎn)介

工作中偶爾會(huì)出現(xiàn)一個(gè)查詢數(shù)據(jù)的需求,那就是需要按天統(tǒng)計(jì)近一個(gè)月或其它一段時(shí)間內(nèi)每天的所有記錄或者分組數(shù)據(jù),沒有數(shù)據(jù)則自動(dòng)補(bǔ)0。

一般情況下我們都會(huì)過濾沒有數(shù)據(jù)的時(shí)間,但前端拿到后端返回的數(shù)據(jù)想直接展示連續(xù)性數(shù)據(jù)變化時(shí)要進(jìn)行再處理,下面介紹如何通過sql語(yǔ)句直接滿足需求。

思路分析

  • 如果能每天都有數(shù)據(jù),可以直接使用最簡(jiǎn)單的查詢節(jié)省時(shí)間。
  • 要能夠展示每天的日期就要?jiǎng)?chuàng)建一張日期虛擬表作為連接表。
  • 要使每天數(shù)據(jù)不為null,使用IFNULL(count,0)函數(shù)進(jìn)行判斷是否補(bǔ)零。

SQL實(shí)現(xiàn)

下面以查詢近一個(gè)月每天的數(shù)據(jù)為示例展示SQL實(shí)現(xiàn)。

按天統(tǒng)計(jì)數(shù)據(jù)

1.沒數(shù)據(jù)的一天過濾

SELECT DATE(CREATE_DATE) as date, COUNT(1) as count
FROM 表
WHERE 字段 = '1'
  AND DATE_FORMAT(CREATE_DATE, '%Y-%m-%d') >=
      DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 30 DAY), '%Y-%m-%d')
GROUP BY DATE(CREATE_DATE);

查詢結(jié)果:

2.沒數(shù)據(jù)的一天有日期總數(shù)為null

SELECT DATE_FORMAT(date,'%Y-%m-%d') AS date,data.num AS count
FROM (
         SELECT @days := DATE_ADD(@days, INTERVAL - 1 DAY) AS date
         FROM (SELECT @days := DATE_ADD(CURDATE(), INTERVAL + 1 DAY)
               FROM 表
              ) day
         WHERE DATE_FORMAT(@days, '%Y-%m-%d') >=
               DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 29 DAY), '%Y-%m-%d')
         ORDER BY date
     ) dates
         LEFT JOIN (
    SELECT  COUNT(1) AS num, DATE(CREATE_DATE) AS time
    FROM audit_work_sheet
    WHERE 字段 = '1'
      AND DATE_FORMAT(CREATE_DATE, '%Y-%m-%d %H:%i:%S') >=
          DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 30 DAY), '%Y-%m-%d %H:%i:%S')
    GROUP BY DATE(CREATE_DATE)
) data ON DATE(time) = date
ORDER BY date;

查詢結(jié)果:

3.沒數(shù)據(jù)的一天有日期總數(shù)為0

SELECT DATE_FORMAT(date,'%Y-%m-%d') AS date,IFNULL(data.num, 0) AS count
FROM (
         SELECT @days := DATE_ADD(@days, INTERVAL - 1 DAY) AS date
         FROM (SELECT @days := DATE_ADD(CURDATE(), INTERVAL + 1 DAY)
               FROM 表
              ) day
         WHERE DATE_FORMAT(@days, '%Y-%m-%d') >=
               DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 29 DAY), '%Y-%m-%d')
         ORDER BY date
     ) dates
         LEFT JOIN (
    SELECT  COUNT(1) AS num, DATE(CREATE_DATE) AS time
    FROM audit_work_sheet
    WHERE 字段 = '1'
      AND DATE_FORMAT(CREATE_DATE, '%Y-%m-%d %H:%i:%S') >=
          DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 30 DAY), '%Y-%m-%d %H:%i:%S')
    GROUP BY DATE(CREATE_DATE)
) data ON DATE(time) = date
ORDER BY date;

查詢結(jié)果

4.加入其它分組字段沒數(shù)據(jù)的一天有日期總數(shù)為0

SELECT DATE_FORMAT(date,'%Y-%m-%d') AS date,data.level AS level, IFNULL(data.num, 0) AS count
FROM (
         SELECT @days := DATE_ADD(@days, INTERVAL - 1 DAY) AS date
         FROM (SELECT @days := DATE_ADD(CURDATE(), INTERVAL + 1 DAY)
               FROM 表
              ) day
         WHERE DATE_FORMAT(@days, '%Y-%m-%d') >=
               DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 29 DAY), '%Y-%m-%d')
         ORDER BY date
     ) dates
         LEFT JOIN (
    SELECT RISK_LEVEL AS level, COUNT(1) AS num, DATE(CREATE_DATE) AS time
    FROM audit_work_sheet
    WHERE 字段 = '1'
      AND DATE_FORMAT(CREATE_DATE, '%Y-%m-%d %H:%i:%S') >=
          DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 30 DAY), '%Y-%m-%d %H:%i:%S')
    GROUP BY DATE(CREATE_DATE),level
) data ON DATE(time) = date
ORDER BY date,level;

查詢結(jié)果

(中間過多數(shù)據(jù)不展示)

以上就是按天統(tǒng)計(jì)數(shù)據(jù)沒有數(shù)據(jù)補(bǔ)零的SQL語(yǔ)句,按月按年等其它時(shí)間段,或其它分組條件,都可以直接修改參數(shù)后查詢出結(jié)果。

附:Mysql按日、周、月進(jìn)行分組統(tǒng)計(jì)

DATE_FORMAT 是 MySQL 內(nèi)置的一個(gè)函數(shù),作用是以不同的格式顯示日期/時(shí)間數(shù)據(jù)。具體的語(yǔ)法如下:

DATE_FORMAT(date,format)

其中

  • date:合法的日期
  • format:規(guī)定日期/時(shí)間的輸出格式,其中format可使用的格式可以查看以下鏈接

下面我們通過具體例子來看如何通過 DATE_FORMAT 進(jìn)行分組統(tǒng)計(jì):

下表兩列分別代表產(chǎn)品買出的準(zhǔn)確時(shí)間(精確到秒),和買出的產(chǎn)品類型。

start_time product_no

2017/12/1 00:00:112A

2017/12/3 07:51:113C

2017/12/3 07:59:253C

2017/12/5 15:40:456C

現(xiàn)在我們需要對(duì)每天,每周,每月各個(gè)產(chǎn)品的銷量進(jìn)行統(tǒng)計(jì),

1)按天統(tǒng)計(jì):

select DATE_FORMAT(start_time,'%Y%m%d') days,count(product_no) count from test group by days;

2)按周統(tǒng)計(jì):

select DATE_FORMAT(start_time,'%Y%u') weeks,count(product_no) count from test group by weeks;

3)按月統(tǒng)計(jì):

select DATE_FORMAT(start_time,'%Y%m') months,count(product_no) count from test group bymonths;

總結(jié)

到此這篇關(guān)于MySQL按天分組統(tǒng)計(jì)一定時(shí)間內(nèi)的數(shù)據(jù)(沒有數(shù)據(jù)補(bǔ)0)的文章就介紹到這了,更多相關(guān)MySQL按天分組統(tǒng)計(jì)數(shù)據(jù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • mysql如何判斷同一字段是否有重復(fù)數(shù)據(jù)

    mysql如何判斷同一字段是否有重復(fù)數(shù)據(jù)

    這篇文章主要介紹了mysql如何判斷同一字段是否有重復(fù)數(shù)據(jù)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • MySQL如何創(chuàng)建視圖

    MySQL如何創(chuàng)建視圖

    這篇文章主要介紹了MySQL如何創(chuàng)建視圖,幫助大家更好的理解和學(xué)習(xí)MySQL,感興趣的朋友可以了解下
    2020-08-08
  • Mysql查詢語(yǔ)句執(zhí)行過程及運(yùn)行原理分析

    Mysql查詢語(yǔ)句執(zhí)行過程及運(yùn)行原理分析

    這篇文章主要介紹了Mysql查詢語(yǔ)句執(zhí)行過程及運(yùn)行原理分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • MySQL ERROR 2013 (HY000)錯(cuò)誤解決方法

    MySQL ERROR 2013 (HY000)錯(cuò)誤解決方法

    這篇文章主要介紹了MySQL ERROR 2013 (HY000)錯(cuò)誤解決方法,錯(cuò)誤提示全文ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 104,需要的朋友可以參考下
    2015-01-01
  • centos下mysql主從復(fù)制設(shè)置詳解

    centos下mysql主從復(fù)制設(shè)置詳解

    centos5.4下mysql主從復(fù)制步驟詳解,大家參考使用吧
    2013-12-12
  • 詳解MySQL如何使用離線模式維護(hù)服務(wù)器

    詳解MySQL如何使用離線模式維護(hù)服務(wù)器

    這篇文章主要為大家介紹了MySQL如何使用離線模式維護(hù)服務(wù)器,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • 關(guān)于JDBC與MySQL臨時(shí)表空間的深入解析

    關(guān)于JDBC與MySQL臨時(shí)表空間的深入解析

    這篇文章主要給大家介紹了關(guān)于JDBC與MySQL臨時(shí)表空間的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-09-09
  • Mysql的慢SQL優(yōu)化思路和規(guī)范詳解

    Mysql的慢SQL優(yōu)化思路和規(guī)范詳解

    這篇文章主要介紹了Mysql的慢SQL優(yōu)化思路和規(guī)范詳解,官方介紹索引是幫助MySQL高效獲取數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)。更通俗的說,數(shù)據(jù)庫(kù)索引好比是一本書前面的目錄,能加快數(shù)據(jù)庫(kù)的查詢速度,需要的朋友可以參考下
    2023-05-05
  • 深入解析MySQL雙寫緩沖區(qū)

    深入解析MySQL雙寫緩沖區(qū)

    雙寫緩沖區(qū)是MySQL中的一種優(yōu)化方式,主要用于提高數(shù)據(jù)的寫性能,本文將介紹Doublewrite Buffer的原理和應(yīng)用,幫助讀者深入理解其如何提高M(jìn)ySQL的數(shù)據(jù)可靠性并防止可能的數(shù)據(jù)損壞,感興趣的可以了解一下
    2024-02-02
  • MySQL中字段類型為longtext的值導(dǎo)出后顯示二進(jìn)制串方式

    MySQL中字段類型為longtext的值導(dǎo)出后顯示二進(jìn)制串方式

    這篇文章主要介紹了MySQL中字段類型為longtext的值導(dǎo)出后顯示二進(jìn)制串方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07

最新評(píng)論

海城市| 乌苏市| 灯塔市| 庆安县| 诏安县| 喀什市| 获嘉县| 肃宁县| 来宾市| 木里| 乡城县| 饶河县| 册亨县| 宝坻区| 太和县| 南丹县| 长寿区| 祁东县| 宁陕县| 阿拉善盟| 会东县| 昌都县| 夏河县| 昌图县| 专栏| 乌拉特后旗| 临澧县| 新蔡县| 龙山县| 海林市| 瑞昌市| 蒙城县| 朔州市| 襄汾县| 昌都县| 长葛市| 明水县| 汉阴县| 连州市| 奉化市| 阿勒泰市|