mysql按照天統(tǒng)計(jì)報(bào)表當(dāng)天沒(méi)有數(shù)據(jù)填0的實(shí)現(xiàn)代碼
1.問(wèn)題復(fù)現(xiàn):
按照天數(shù)統(tǒng)計(jì)每天的總數(shù),如果其中有幾天沒(méi)有數(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ì)的需求。期望沒(méi)有值填0

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é)果如下:

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é)果如下:

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ù),沒(méi)有記錄就是0
最終執(zhí)行結(jié)果:

總結(jié)
以上所述是小編給大家介紹的mysql按照天統(tǒng)計(jì)報(bào)表當(dāng)天沒(méi)有數(shù)據(jù)填0的實(shí)現(xiàn)代碼,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- php、mysql查詢當(dāng)天,查詢本周,查詢本月的數(shù)據(jù)實(shí)例(字段是時(shí)間戳)
- mysql中獲取一天、一周、一月時(shí)間數(shù)據(jù)的各種sql語(yǔ)句寫法
- MySQL如何統(tǒng)計(jì)一個(gè)數(shù)據(jù)庫(kù)所有表的數(shù)據(jù)量
- mysql聚合統(tǒng)計(jì)數(shù)據(jù)查詢緩慢的優(yōu)化方法
- laravel實(shí)現(xiàn)按月或天或小時(shí)統(tǒng)計(jì)mysql數(shù)據(jù)的方法
- 詳解mysql 獲取某個(gè)時(shí)間段每一天、每一個(gè)小時(shí)的統(tǒng)計(jì)數(shù)據(jù)
- mysql 獲取規(guī)定時(shí)間段內(nèi)的統(tǒng)計(jì)數(shù)據(jù)
- MySql按時(shí),天,周,月進(jìn)行數(shù)據(jù)統(tǒng)計(jì)
相關(guān)文章
數(shù)據(jù)庫(kù)SQL腳本文件導(dǎo)入到mysql數(shù)據(jù)庫(kù)的兩種方式
MySQL作為一種關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),它是在Web服務(wù)器中廣泛使用的,它把數(shù)據(jù)存儲(chǔ)在表中,這篇文章主要介紹了數(shù)據(jù)庫(kù)SQL腳本文件導(dǎo)入到mysql數(shù)據(jù)庫(kù)的兩種方式,需要的朋友可以參考下2025-04-04
SQL匯總統(tǒng)計(jì)與GROUP BY過(guò)濾查詢實(shí)現(xiàn)
這篇文章主要介紹了SQL匯總統(tǒng)計(jì)與GROUP BY過(guò)濾查詢實(shí)現(xiàn),GROUP BY 實(shí)質(zhì)是先排序后分組,遵照索引建的最佳左前綴。當(dāng)無(wú)法使用索引時(shí),增大max_length_for_sort_data和sort_buffer參數(shù)的值2023-01-01
Mysql中文漢字轉(zhuǎn)拼音的實(shí)現(xiàn)(每個(gè)漢字轉(zhuǎn)換全拼)
這篇文章主要介紹了Mysql中文漢字轉(zhuǎn)拼音的實(shí)現(xiàn),并且每個(gè)漢字會(huì)轉(zhuǎn)換全拼,使用Mysql自定義函數(shù)實(shí)現(xiàn),需要的朋友可以參考下2014-06-06
mysql修改sql_mode報(bào)錯(cuò)的解決
今天在Navicat中運(yùn)行sql語(yǔ)句創(chuàng)建數(shù)據(jù)表出現(xiàn)了錯(cuò)誤Err 1067。本文主要介紹了mysql修改sql_mode報(bào)錯(cuò)的解決,感興趣的可以了解一下2021-09-09
詳解騰訊云CentOS7.0使用yum安裝mysql及使用遇到的問(wèn)題
本篇文章主要介紹了騰訊云CentOS7.0使用yum安裝mysql,詳細(xì)的介紹了使用yum安裝mysql及使用遇到的問(wèn)題,有興趣的可以了解一下。2017-01-01
MySQL實(shí)現(xiàn)批量插入測(cè)試數(shù)據(jù)的方式總結(jié)
在開發(fā)過(guò)程中經(jīng)常需要一些測(cè)試數(shù)據(jù),?這個(gè)時(shí)候如果手敲的話,?十行二十行還好,?多了就很死亡了,?接下來(lái)介紹兩種常用的MySQL測(cè)試數(shù)據(jù)批量生成方式,希望對(duì)大家有所幫助2023-05-05

