新聞中心
怎么讓數(shù)據(jù)庫(kù)統(tǒng)計(jì)連續(xù)相同數(shù)據(jù)?相信大部分人都還沒(méi)學(xué)會(huì)這個(gè)技能,為了讓大家學(xué)會(huì),給大家總結(jié)了以下內(nèi)容,話不多說(shuō),一起往下看吧。
成都創(chuàng)新互聯(lián)公司堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的龍華網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
在數(shù)據(jù)庫(kù)里統(tǒng)計(jì)某個(gè)字段中相同數(shù)據(jù)直接用Group by就可以了,但如果附加個(gè)順序條件后就有點(diǎn)麻煩了,例如,統(tǒng)計(jì)每一個(gè)玩家的連勝或者連敗情況。 Oracle有窗口分析函數(shù),需要多層嵌套加上高級(jí)分析函數(shù)才能實(shí)現(xiàn),MySQL、Hive等數(shù)據(jù)庫(kù)不如Oracle強(qiáng)大,實(shí)現(xiàn)起來(lái)就比較費(fèi)勁了。集算器作為應(yīng)用和數(shù)據(jù)庫(kù)的中間計(jì)算層,可以用統(tǒng)一的方式,很簡(jiǎn)單就能解決此類問(wèn)題。先看一個(gè)簡(jiǎn)單的例子,表logs 如下,求num中連續(xù) 出現(xiàn)3次以上的數(shù)字都有哪些?
+----+-----+
| id | num |
+----+-----+
| 1 | 1 |
| 2 | 1 |
| 3 | 1 |
| 4 | 2 |
| 5 | 1 |
| 6 | 2 |
| 7 | 2 |
+----+-----+
集算器的代碼是這樣的,
A | |
1 | $select id,num from logs |
2 | =A1.group@o(num) |
3 | =A2.select(~.len()>=3).(~.num) |
A1:sql取數(shù)
A2:按照相鄰num同值分組
A3:選出至少連續(xù)出現(xiàn)三次相同的num
如果想知道相同連續(xù)值最大有多少條記錄,A3中的表達(dá)式改為=A2.max(~.len())即可。
有些需求不是按順序有相同值,是按順序有相同趨勢(shì),比如,找出連續(xù)虧損達(dá)三月或以上的那些月份的記錄,用集算器很簡(jiǎn)單,只是把相鄰數(shù)據(jù)分組規(guī)則從等值條件改為趨勢(shì)條件即可。代碼參考如下:
A | |
1 | =db.query("select * from 收支表 order by 月份") |
2 | =A1.group@o(收入>支出).select(~.收入<~.支出 && ~.len()>=3).conj() |
考勤記錄合并進(jìn)出狀態(tài)也是類似的情況,在電商、物流和銀行也常遇到統(tǒng)計(jì)用戶連續(xù)交易的總額、連續(xù)登陸天數(shù)、連續(xù)登陸開(kāi)始和結(jié)束時(shí)間、間隔天數(shù)等這樣的需求,都可以仿照這些例子很快實(shí)現(xiàn)。其實(shí)還有很多情況用SQL十分不方便,但用集算器卻很簡(jiǎn)單,感興趣可以看看集算器優(yōu)化 SQL 示例匯總 。集算器提供了Jdbc接口,Java可直接調(diào)用,使用非常方便。
看完上述內(nèi)容,你們掌握數(shù)據(jù)庫(kù)統(tǒng)計(jì)連續(xù)相同數(shù)據(jù)的實(shí)現(xiàn)方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!
分享題目:怎么讓數(shù)據(jù)庫(kù)統(tǒng)計(jì)連續(xù)相同數(shù)據(jù)
本文URL:http://www.ef60e0e.cn/article/pphhph.html