日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

mysql 怎么查询结果补0_mysql查询连续时间数据——无数据补0

發(fā)布時(shí)間:2025/4/16 数据库 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql 怎么查询结果补0_mysql查询连续时间数据——无数据补0 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

用D3來(lái)畫統(tǒng)計(jì)圖,數(shù)據(jù)是從mysql數(shù)據(jù)庫(kù)中查出來(lái)的。mysql

統(tǒng)計(jì)圖是關(guān)于某段時(shí)間內(nèi),每一年/每個(gè)月/每周的微博數(shù)量的折線圖。數(shù)據(jù)表是一條微博為一條記錄,每條記錄有日期這個(gè)字段。sql

首先考慮用group by來(lái)統(tǒng)計(jì)天天/ 每個(gè)月/每一年的微博數(shù)量,可是這樣就會(huì)有一個(gè)問(wèn)題:若是某天沒(méi)有數(shù)據(jù),也就是沒(méi)有發(fā)微博,那么group by的結(jié)果是沒(méi)有這一天的,也就是說(shuō)咱們group by 的結(jié)果永遠(yuǎn)不會(huì)有0。顯然這樣的結(jié)果是不對(duì)的。數(shù)據(jù)庫(kù)

那么如何解決這個(gè)問(wèn)題呢,思路就是要補(bǔ)全沒(méi)有的日期,而后在這個(gè)日期對(duì)應(yīng)的數(shù)量字段填0。函數(shù)

下面看一下具體的實(shí)現(xiàn)。spa

第一步:如何補(bǔ)全沒(méi)有的日期3d

最直接的方法就是我手動(dòng)產(chǎn)生一個(gè)連續(xù)的日期。代碼是這樣的:(也是網(wǎng)上參考別人的代碼)code

CREATE TABLE num (i int);

INSERT INTO num (i) VALUES (0), (1), (2), (3), (4), (5), (6), (7), (8), (9);

select adddate('2012-09-01', numlist.id) as `date` from (SELECT n1.i + n10.i*10 + n100.i*100 AS id FROM num n1 cross join num as n10 cross join num as n100) as numlist where adddate('2012-09-01', numlist.id) <= '2012-09-10';

結(jié)果:

能夠看到產(chǎn)生了指定時(shí)間的連續(xù)日期。咱們?nèi)缃褚氖?#xff0c;從某個(gè)帳號(hào)發(fā)的第一條微博到如今的時(shí)間,因此修改相應(yīng)的代碼,成這樣:orm

(對(duì)了,講一下,剛開(kāi)始把num表誤起名為month,因此之后就叫month了)blog

select adddate(( SELECT DATE_FORMAT( wi.PubTime, '%Y-%m-%d') as weibo_date

FROM weibo_info_copy as wi where wi.UID='1705822647' and wi.PubTime > 0

GROUP BY DATE_FORMAT( wi.PubTime, '%Y-%m-%d' )

limit 1), numlist.id) as `date` from (SELECT n1.i + n10.i*10 + n100.i*100+n1000.i*1000 AS id FROM month n1 cross join month as n10 cross join month as n100 cross join month as n1000) as numlist where adddate(( SELECT DATE_FORMAT( wi.PubTime, '%Y-%m-%d') as weibo_date

FROM weibo_info_copy as wi where wi.UID='1705822647'

GROUP BY DATE_FORMAT( wi.PubTime, '%Y-%m-%d' )

limit 1), numlist.id) <= CURRENT_DATE

修改了三處:

(1)起始時(shí)間:這里用了一個(gè)sql語(yǔ)句的查詢結(jié)果,就是微博數(shù)據(jù)的第一條的時(shí)間。這樣防止了不一樣帳號(hào)相同的起始時(shí)間反映在圖表上會(huì)形成很長(zhǎng)的空白或者是漏掉一部分?jǐn)?shù)據(jù)。it

(2)終止時(shí)間:這里選取當(dāng)前時(shí)間

(3)范圍:“注意到以前的數(shù)量只會(huì)到1000,這里多加了一部分,數(shù)量會(huì)擴(kuò)大到10000,算了一下27年有余,應(yīng)該是夠用了。

這樣就能夠產(chǎn)生一個(gè)連續(xù)的日期:

能夠看到,從2010-03-06到如今,有2190天。

好了,如今咱們完成了第一步,獲得了連續(xù)的時(shí)間。

第二步:將結(jié)果存入表格,以便聯(lián)合查詢。

這里用到insert into語(yǔ)句。

drop table if exists weibo_line_date;

CREATE TABLE if not exists weibo_line_date (name date);

insert into weibo_line_date (name) select * from (

select adddate(( SELECT DATE_FORMAT( wi.PubTime, '%Y-%m-%d') as weibo_date

FROM weibo_info_copy as wi where wi.UID='1705822647' and wi.PubTime > 0

GROUP BY DATE_FORMAT( wi.PubTime, '%Y-%m-%d' )

limit 1), numlist.id) as `date` from (SELECT n1.i + n10.i*10 + n100.i*100+n1000.i*1000 AS id FROM month n1 cross join month as n10 cross join month as n100 cross join month as n1000) as numlist where adddate(( SELECT DATE_FORMAT( wi.PubTime, '%Y-%m-%d') as weibo_date

FROM weibo_info_copy as wi where wi.UID='1705822647'

GROUP BY DATE_FORMAT( wi.PubTime, '%Y-%m-%d' )

limit 1), numlist.id) <= CURRENT_DATE

) as t

注意到兩點(diǎn):

(1)先要?jiǎng)h除原來(lái)的表,為了避免重復(fù)添加數(shù)據(jù)

(2)在建表時(shí)指定數(shù)據(jù)類型和字符集,否則會(huì)出錯(cuò)。

好了,如今能夠獲得一個(gè)如上結(jié)果的新表,叫作weibo_line_date。

第三步:聯(lián)合查詢,無(wú)數(shù)據(jù)補(bǔ)0

SELECT weibo_line_date.name as weibo_date, IF(weibo_num IS NULL , 0, weibo_num) as weibo_num

FROM(SELECT DATE_FORMAT( wi.PubTime, '%Y-%m-%d') as weibo_date , COUNT(*) as weibo_num

FROM weibo_info_copy as wi where wi.UID='1705822647'

GROUP BY DATE_FORMAT( wi.PubTime, '%Y-%m-%d' )) t

RIGHT JOIN weibo_line_date on t.weibo_date = weibo_line_date.name

結(jié)果:

這就獲得了我想要的結(jié)果。

看一下圖吧

這樣就完成了咱們的需求。

拓展一下,若是查每一年/每個(gè)月的,又該怎么辦呢。

首先想到,咱們要產(chǎn)生一個(gè)連續(xù)的月份的表。修改代碼:

select date_format(date_add((SELECT DATE_FORMAT( wi.PubTime, '%Y-%m-%d') as weibo_date

FROM weibo_info_copy as wi where wi.UID='1705822647'

GROUP BY DATE_FORMAT( wi.PubTime, '%Y-%m' )

limit 1), interval numlist.id month),'%Y-%m') as `date`

from (SELECT n1.i + n10.i*10 + n100.i*100 AS id FROM month n1 cross join month as n10 cross join month as n100) as numlist

where date_format(date_add((SELECT DATE_FORMAT( wi.PubTime, '%Y-%m-%d') as weibo_date

FROM weibo_info_copy as wi where wi.UID='1705822647'

GROUP BY DATE_FORMAT( wi.PubTime, '%Y-%m' )

limit 1), interval numlist.id month),'%Y-%m') <= date_format(CURRENT_DATE,'%Y-%m')

注意兩個(gè)地方:

(1)數(shù)據(jù)格式:咱們?nèi)缃褚氖?010-03這樣的數(shù)據(jù),因此要用data_format函數(shù),將‘0000-00-00‘的數(shù)據(jù)轉(zhuǎn)換為’0000-00‘

(2)間隔:date_add函數(shù),第一個(gè)參數(shù)是起始時(shí)間;第二個(gè)參數(shù)是間隔,若是為整數(shù),就默認(rèn)為間隔一天,如今咱們要設(shè)置為一個(gè)月,

interval numlist.id month要寫成這樣。若是是一年就是year

其次,在新建表的時(shí)候,若是指定字段類型為date會(huì)出錯(cuò),結(jié)果全為’0000-00‘,因此我改成了text。

這樣的話,在下一步聯(lián)合查詢的時(shí)候,字符集不匹配會(huì)報(bào)錯(cuò),因此要指定相應(yīng)的字符集。這里必定要注意。

CREATE TABLE if not exists weibo_line_date (name text CHARACTER SET UTF8)

接下來(lái)的步驟就和以前的同樣了。

總結(jié)

以上是生活随笔為你收集整理的mysql 怎么查询结果补0_mysql查询连续时间数据——无数据补0的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 免费三级网| 狼人精品一区二区三区在线 | 在线观看国产精品入口男同 | 久久性网| 91在线不卡| 久久久精品国产sm调教网站 | 好姑娘在线观看高清完整版电影 | 成人无码视频 | 日本少妇高潮 | 久久色在线视频 | av免费视屏 | 青草99| 色屁屁草草影院ccyycom | 99爱精品| 天天曰天天操 | 婷婷影院在线观看 | 欧美日韩精品久久久免费观看 | 国产第一页第二页 | 精品久久久无码中文字幕边打电话 | 日韩欧美在线观看一区二区三区 | 日本理论视频 | 国产精品欧美一区二区 | 小镇姑娘国语版在线观看免费 | 日韩欧美爱爱 | 国产aⅴ精品 | 中文字幕精品久久久 | 国产一区欧美一区 | 亚洲成av人片一区二区 | 日韩乱码在线 | 亚洲国产欧美一区 | 日本全黄裸体片 | 国产精品av在线播放 | 秋霞免费av | 日韩欧美一级二级 | 亚欧洲精品在线视频 | 欧美日韩亚洲免费 | 天天色小说 | 久久国产精品亚洲 | 69精品视频| 高清av不卡 | 草草久久久无码国产专区 | av电影在线播放 | 五月婷婷综 | 91国偷自产一区二区三区女王 | 久久精品操 | 伊人看片 | 色天使亚洲| 国产精品毛片久久久久久久av | 最近中文字幕在线mv视频在线 | 色综合久久精品亚洲国产 | 一本久道久久综合无码中文 | 欧美18免费视频 | 超碰日日干| 国产精品第56页 | 欧美a一级 | 26uuu欧美日本 | 日韩精品不卡 | 日韩欧美中文字幕一区二区三区 | 黑人一级黄色片 | 国产中文欧美日韩在线 | www.一区二区三区四区 | www.成人国产 | 国产一区二区三区在线观看免费 | 久久.com| a天堂资源在线观看 | 秋霞影院午夜丰满少妇在线视频 | 91最新在线 | 亚洲国产日韩在线一区 | 中文字幕一区二区三区视频 | 亚洲动漫精品 | 窝窝午夜理论片影院 | 国产精品色婷婷 | 麻豆av免费在线观看 | 激情网av | 奶妈的诱惑 | 成人精品网 | 一级坐爱片 | 91视频高清 | 无码国产伦一区二区三区视频 | 精品在线免费播放 | 99视频在线免费观看 | 青青草视频免费播放 | 红桃视频91| 天天艹日日艹 | 成人免费看片载 | 久久久久久久久久一区二区 | 成人做爰黄 | 色图综合 | 亚洲乱码国产乱码精品精98午夜 | 777av| 色综合啪啪 | 国产精品第56页 | 日本一区二区三区在线视频 | 伊人成人久久 | www裸玉足久久久 | 精品在线99 | 四虎国产精品永久免费观看视频 | 亚洲免费av网站 | 无码av天堂一区二区三区 |