按照天數統計天天的總數,若是其中有幾天沒有數據,那麼group by 返回會忽略那幾天,如何填充0?以下圖,統計的10-3~10-10 7天的數據,其中只有8號和10號有數據,這樣返回,數據只有2個,不符合報表統計的需求。指望沒有值填0spa
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
執行結果以下:3d
SQL分析:code
1.@cdate := 是定義名爲cdate的變量並賦值(select 後面必須用:=)blog
2.@cdate := DATE_ADD('20171219', INTERVAL + 1 DAY) 按照傳入的日期'20171219',加一天class
3.SELECT @cdate := DATE_ADD('20171219', INTERVAL + 1 DAY) FROM `order` 找一張表記錄確定大於10條的便可,執行結果以下:變量
4.@cdate := DATE_ADD(@cdate, INTERVAL - 1 DAY) DAY 把定義的cdate變量天數-1(自減) date
5.LIMIT 7 限制一下條數,大功告成,咱們獲得了指定日期往前7天的記錄select
即按照左表關聯業務數據,根據左表的日期分組,即分紅了指定的7天數據,有記錄就統計條數,沒有記錄就是0im
最終執行結果:統計
完畢!