mysql按時間統計數據,沒有數據的時候自動補充0


1.數據庫中選擇任意一個有數據的表,例如我選擇的是 shopping_user 表

SELECT
    @cdate := DATE_ADD( @cdate, INTERVAL - 1 DAY ) `date`,
    0 AS `sum` 
FROM
    ( SELECT @cdate := DATE_ADD( CURDATE( ), INTERVAL + 1 DAY ) FROM shopping_user ) t1 
WHERE
    @cdate > '2017-08-03'

   選擇一統計時間開始時間,我的開始時間選擇的是2017-08-03,結束時間默認是當前日期。

2.將自己要統計的數據,按我們自己的要求寫出來,當然此時,肯定顯示的都是有數據的記錄統計結果:

   我這是查詢的shopping_hibitRecord 按照ADDTIME 統計的條數 

SELECT
        DATE_FORMAT( ADDTIME, '%Y-%m-%d' ) AS `date`,
        COUNT( * ) AS 'sum' 
    FROM
        `shopping_hibitRecord` 
    WHERE
        shopping_hibitRecord.`ADDTIME` >= '2017-08-03' 
        AND deleteStatus = FALSE 
        AND TYPE = 0 
    GROUP BY
        DATE DESC   

此時沒有記錄的時間,就沒有展示在結果中。

 

3.聯合查詢將沒有記錄的時間補0

 

SELECT
    `date`,
    MAX( `sum` ) AS `sum` 
FROM
    (
    SELECT
        @cdate := DATE_ADD( @cdate, INTERVAL - 1 DAY ) `date`,
        0 AS `sum` 
    FROM
        ( SELECT @cdate := DATE_ADD( CURDATE( ), INTERVAL + 1 DAY ) FROM shopping_user ) t1 
    WHERE
        @cdate > '2017-08-03' UNION ALL
    SELECT
        DATE_FORMAT( ADDTIME, '%Y-%m-%d' ) AS `date`,
        COUNT( * ) AS 'sum' 
    FROM
        `shopping_hibitRecord` 
    WHERE
        shopping_hibitRecord.`ADDTIME` >= '2017-08-03' 
        AND deleteStatus = FALSE 
        AND TYPE = 0 
    GROUP BY
        DATE DESC 
    ) _tmpAllTable 
GROUP BY
    `date` DESC

 上面要求1、2 的記錄條數字段名字一樣,我選擇的都是 sum

  結果就是沒有數據的時間補上數據0了

   

 

總結:當然還有別的方法,不過這個方法不用創建任何的存儲過程,是相對來說簡單一點的

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM