1.問題復(fù)現(xiàn):
按照天數(shù)統(tǒng)計(jì)每天的總數(shù),如果其中有幾天沒有數(shù)據(jù),那么group by 返回會(huì)忽略那幾天,如何填充0?如下圖,統(tǒng)計(jì)的10-3~10-10 7天的數(shù)據(jù),其中只有8號(hào)和10號(hào)有數(shù)據(jù),這樣返回,數(shù)據(jù)只有2個(gè),不符合報(bào)表統(tǒng)計(jì)的需求。期望沒有值填0
![](/d/20211018/98e75dd949e51c8f61b9040181fe6334.gif)
2.換個(gè)思維:
我們用一組連續(xù)的天數(shù)作為左表然后left join 要查詢的數(shù)據(jù) 最后group by.:連續(xù)天數(shù)表 t1 left join 業(yè)務(wù)數(shù)據(jù) 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`;
2.1 連續(xù)天數(shù)表
SELECT
@cdate := DATE_ADD(@cdate, INTERVAL - 1 DAY) DAY
FROM
(SELECT
@cdate := DATE_ADD('20171219', INTERVAL + 1 DAY)
FROM
order) t0
LIMIT 7
執(zhí)行結(jié)果如下:
![](/d/20211018/1505cdc71be868a9b1ff9c995b423fd4.gif)
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條的即可,執(zhí)行結(jié)果如下:
![](/d/20211018/8bd384d21940f490afa6b15683994884.gif)
4.@cdate := DATE_ADD(@cdate, INTERVAL - 1 DAY) DAY
把定義的cdate變量天數(shù)-1(自減)
5.LIMIT 7 限制一下條數(shù),大功告成,我們得到了指定日期往前7天的記錄
2.2 左關(guān)聯(lián)然后分組
left join group by t1.day
即按照左表關(guān)聯(lián)業(yè)務(wù)數(shù)據(jù),根據(jù)左表的日期分組,即分成了指定的7天數(shù)據(jù),有記錄就統(tǒng)計(jì)條數(shù),沒有記錄就是0
最終執(zhí)行結(jié)果:
![](/d/20211018/6d306c45291eb3172116ee5ea4d93e56.gif)
總結(jié)
以上所述是小編給大家介紹的mysql按照天統(tǒng)計(jì)報(bào)表當(dāng)天沒有數(shù)據(jù)填0的實(shí)現(xiàn)代碼,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
您可能感興趣的文章:- MySQL 統(tǒng)計(jì)查詢實(shí)現(xiàn)代碼
- MYSQL中有關(guān)SUM字段按條件統(tǒng)計(jì)使用IF函數(shù)(case)問題
- 如何使用MySQL查詢某個(gè)列中相同值的數(shù)量統(tǒng)計(jì)
- 利用MySQL統(tǒng)計(jì)一列中不同值的數(shù)量方法示例
- 單個(gè)select語句實(shí)現(xiàn)MySQL查詢統(tǒng)計(jì)次數(shù)
- MYSQL每隔10分鐘進(jìn)行分組統(tǒng)計(jì)的實(shí)現(xiàn)方法
- MySQL中幾種數(shù)據(jù)統(tǒng)計(jì)查詢的基本使用教程
- MySQL按時(shí)間統(tǒng)計(jì)數(shù)據(jù)的方法總結(jié)
- mysql 獲取規(guī)定時(shí)間段內(nèi)的統(tǒng)計(jì)數(shù)據(jù)
- MySQL統(tǒng)計(jì)函數(shù)GROUP_CONCAT使用陷阱分析
- mysql滑動(dòng)訂單問題原理與解決方法實(shí)例分析