国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

mysql累加計(jì)算實(shí)現(xiàn)方法詳解

瀏覽:7日期:2023-10-14 18:30:57

本文實(shí)例講述了mysql累加計(jì)算。分享給大家供大家參考,具體如下:

前言

接了一個(gè)需求,產(chǎn)品想分析一下用戶(hù)增長(zhǎng)的曲線。也就是某個(gè)時(shí)間段的每日總?cè)藬?shù)列表。好對(duì)近期活動(dòng)進(jìn)行一個(gè)效果的評(píng)測(cè)。這個(gè)統(tǒng)計(jì)sql還是花了我一小段時(shí)間的。mysql統(tǒng)計(jì)這個(gè)還是需要一定的技巧的。

需求分析 user_id reg_time 1 2019-09-03 2 2019-09-04 3 2019-09-04 4 2019-09-05 5 2019-09-05 6 2019-09-06

假如上表user_info,我們很容易根據(jù)時(shí)間維度統(tǒng)計(jì)出每日新增的人數(shù)。sql如下:

select reg_time, count(user_id) daily_quantity from user_infogroup by reg_time

通過(guò)上面的sql我們很容易得出以下列表:

reg_time daily_quantity 2019-09-03 1 2019-09-04 2 2019-09-05 2 2019-09-06 1

但是這個(gè)并不是我們想要的結(jié)果。我們想要的應(yīng)該是 上一天的總?cè)藬?shù)加上今天的凈增長(zhǎng)數(shù),以此類(lèi)推。也就是我們想要:

reg_time daily_quantity 2019-09-03 1 2019-09-04 3 2019-09-05 5 2019-09-06 6

這就有點(diǎn)棘手了,我們需要進(jìn)行累加計(jì)算。我嘗試了自鏈接,函數(shù)等一些操作后還是沒(méi)有得到一個(gè)正確的結(jié)果。這時(shí)想到如果是java代碼處理這個(gè)就再合適不過(guò)了,我們只要聲明初始值,然后循環(huán)累加就能計(jì)算出結(jié)果了:

public static void main(String[] args) { int[] arr = {1, 2, 2, 1}; int[] ints = dailyQuantityArr(0, arr); for (int i : ints) { System.out.println('i = ' + i); } } public static int[] dailyQuantityArr(int base, int[] dailyIncrQuantity) { int[] result = new int[dailyIncrQuantity.length]; // 累加填充 for (int i = 0; i < dailyIncrQuantity.length; i++) { base += dailyIncrQuantity[i]; result[i] = base; } return result; }

上面的偽代碼就可以計(jì)算出結(jié)果。當(dāng)然如果可以的話(huà)盡量在java業(yè)務(wù)代碼進(jìn)行這種復(fù)雜運(yùn)算。但是產(chǎn)品給出的需求是我們能夠提供一句sql能夠直接在可視化數(shù)據(jù)引擎中得出他要的答案。于是從上面的代碼得出靈感。mysql是否有這種變量呢? 有!當(dāng)然有。記得很普遍的場(chǎng)景,以前經(jīng)常有業(yè)務(wù)需要我們輸出序號(hào),Oracle是自帶一個(gè)偽列rownum,但是mysql沒(méi)有。mysql通常通過(guò)聲明自增變量來(lái)生成序號(hào)。拿user_info表舉例子:

select (@i:=@i+1) as rownum, user_id from user_info ,(select @i:=0) as rMysql 用戶(hù)變量

mysql 變量分為 局部變量、用戶(hù)變量、會(huì)話(huà)變量、全局變量 。上面的語(yǔ)句我們使用的是用戶(hù)變量。用戶(hù)變量與數(shù)據(jù)庫(kù)連接有關(guān),在連接中聲明的變量,在存儲(chǔ)過(guò)程中創(chuàng)建了用戶(hù)變量后一直到數(shù)據(jù)庫(kù)實(shí)例接斷開(kāi)的時(shí)候,變量就會(huì)消失。在此連接中聲明的變量無(wú)法在另一連接中使用。MySQL中用戶(hù)變量不用事前申明,使用的時(shí)候以@varname的格式進(jìn)行聲明。通過(guò):=或者=進(jìn)行賦值操作。如果需要對(duì)外輸出需要用select關(guān)鍵字,而且賦值必須使用:=。

使用Mysql用戶(hù)變量進(jìn)行累加計(jì)算

我們學(xué)習(xí)了用戶(hù)變量后就知道如何進(jìn)行累加計(jì)算了,那么user_info表的日累計(jì)總?cè)藬?shù)應(yīng)該是這樣的:

select a.reg_time, a.daily, @i:=@i+a.daily as daily_quantity from (select reg_time , count(user_id) daily from user group by reg_time ) a , (select @i:=0) b

查詢(xún)的結(jié)果如下,符合邏輯需要。

reg_time daily daily_quantity 2019-09-03 1 1 2019-09-04 2 3 2019-09-05 2 5 2019-09-06 1 6

但是這里有一個(gè)小坑,在實(shí)際業(yè)務(wù)中@i初始化的時(shí)候有可能不為0,比如我們統(tǒng)計(jì)上面9月4號(hào)到9月6號(hào)這時(shí)候之前的總?cè)藬?shù)為1 。 這個(gè)要特別注意。實(shí)際業(yè)務(wù)開(kāi)發(fā)中如果我們能在邏輯編碼中實(shí)現(xiàn)還是建議在邏輯編碼中進(jìn)行一些復(fù)雜的運(yùn)算。

總結(jié)

今天我們通過(guò)mysql用戶(hù)變量解決了一個(gè)在sql中累加計(jì)算的問(wèn)題。不知道你有沒(méi)有其它好的思路呢?歡迎留言討論。

更多關(guān)于MySQL相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《MySQL查詢(xún)技巧大全》、《MySQL事務(wù)操作技巧匯總》、《MySQL存儲(chǔ)過(guò)程技巧大全》、《MySQL數(shù)據(jù)庫(kù)鎖相關(guān)技巧匯總》及《MySQL常用函數(shù)大匯總》

希望本文所述對(duì)大家MySQL數(shù)據(jù)庫(kù)計(jì)有所幫助。

標(biāo)簽: MySQL 數(shù)據(jù)庫(kù)
相關(guān)文章:
主站蜘蛛池模板: 国产成人深夜福利短视频99 | 亚洲欧洲日产国产 最新 | 玖草 | 亚洲高清视频在线 | 欧美不卡视频在线观看 | 欧美成人午夜做爰视频在线观看 | 成人123| 伊人久热这里只有精品视频99 | 欧美一级视频在线观看 | 久色视频在线观看 | 午夜性爽爽爽 | 国产高清免费 | 国产成人做受免费视频 | 欧美视频一区二区在线观看 | 欧美一级专区免费大片俄罗斯 | 日本三级香港三级乳网址 | 又黄又爽视频好爽视频 | 国产做a爰片久久毛片a | 欧美a毛片 | 国内精品伊人久久 | 亚洲精品视频观看 | 亚洲另类视频 | 国产区精品一区二区不卡中文 | 日韩欧美一区二区在线 | 亚洲精品综合 | 精品亚洲福利一区二区 | 日本韩国台湾香港三级 | 欧美freesex10一13黑人 | 国产精品久久久久久影院 | 亚洲网站www | 亚洲网美女 | 国产精品免费一区二区三区 | 精品国产亚洲一区二区三区 | 成人精品国产亚洲欧洲 | 一级毛片不卡免费看老司机 | a级毛片免费播放 | 亚洲成a人v在线观看 | 久久永久免费 | 国产精自产拍久久久久久蜜 | 亚洲一级毛片欧美一级说乱 | 免费观看日本特色做爰视频在线 |