您好,登錄后才能下訂單哦!
這篇文章主要介紹mysql如何按照天統計報表當天沒有數據填0,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
按照天數統計每天的總數,如果其中有幾天沒有數據,那么group by 返回會忽略那幾天,如何填充0?如下圖,統計的10-3~10-10 7天的數據,其中只有8號和10號有數據,這樣返回,數據只有2個,不符合報表統計的需求。期望沒有值填0
我們用一組連續的天數作為左表然后left join 要查詢的數據 最后group by.:連續天數表 t1 left join 業務數據 t2 group by t1.day ,如下圖:
SELECT t1.`day`, COUNT(t2.user_id) payment_num FROM (SELECT @cdate := DATE_ADD(@cdate, INTERVAL - 1 DAY) DAY FROM (SELECT @cdate := DATE_ADD('20171219', INTERVAL + 1 DAY) FROM order) t0 LIMIT 7) t1 LEFT JOIN (SELECT DATE(a.create_time) DAY, a.user_id FROM pay_payment a JOIN dealer_store b ON a.order_no = b.order_no WHERE DATE(create_time) <= '20171219' AND DATE(create_time) > DATE_SUB('20171219', INTERVAL 7 DAY) ) t2 ON t2.day = t1.day GROUP BY t1.`day`;
SELECT @cdate := DATE_ADD(@cdate, INTERVAL - 1 DAY) DAY FROM (SELECT @cdate := DATE_ADD('20171219', INTERVAL + 1 DAY) FROM order) t0 LIMIT 7
執行結果如下:
SQL分析:
1. @cdate := 是定義名為cdate的變量并賦值(select 后面必須用:=)
2.@cdate := DATE_ADD('20171219', INTERVAL + 1 DAY)
按照傳入的日期'20171219',加一天
3.SELECT @cdate := DATE_ADD('20171219', INTERVAL + 1 DAY) FROM `order`
找一張表記錄肯定大于10條的即可,執行結果如下:
4.@cdate := DATE_ADD(@cdate, INTERVAL - 1 DAY) DAY
把定義的cdate變量天數-1(自減)
5.LIMIT 7 限制一下條數,大功告成,我們得到了指定日期往前7天的記錄
left join group by t1.day
即按照左表關聯業務數據,根據左表的日期分組,即分成了指定的7天數據,有記錄就統計條數,沒有記錄就是0
最終執行結果:
以上是“mysql如何按照天統計報表當天沒有數據填0”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。