国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

第25期:有序分組

企業動態
我們知道,SQL延用了數學上的無序集合概念,所以SQL的分組并不關注過待分組集合中成員的次序,分組規則都是建立在成員取值本身上。

有序分組

我們知道,SQL延用了數學上的無序集合概念,所以SQL的分組并不關注過待分組集合中成員的次序。我們在前面討論過的等值分組和非等值分組,也都沒有關注過這個問題,分組規則都是建立在成員取值本身上。但如果我們要拓展SQL,以有序集合為考慮對象時,那就必須考慮成員次序對分組的影響了,而且,現實業務中有大量的有序分組應用場景。

1. 序號分組

一個簡單的例子:將一個班的學生平均分成三份(假定人數能被3整除)。按我們在前面所說的分組定義,這也可以看成是一種分組,但這個運算在SQL中卻很難寫出來,因為分組依據和成員取值沒有關系。

如果使用我們在前面講有序遍歷語法時的#符號,這個問題就很容易解決了。

  1. A.group( (#-1)*3\A.len() )   // 按序號分成前1/3,中1/3,后1/3 
  2. A.group( (#-1)%3 )             // 還可以按序號每三個中取一個構成分組子集 

用SQL實現這個運算就麻煩很多,需要先用子查詢造出一個序號,然后再執行類似的分組規則。

上面這個例子中其實還沒有真正關注成員的次序,只是說明了序號的作用,待分組集合的成員是其它次序時也可以得到可用的結果。

我們再看更多例子。

處理文本日志時,有些日志的基本單位不是1行,而可能是3行,即每個事件總是寫出3行文本,這并不是多罕見的情況。對付這種日志時,就需要把文本每3行拆成一個分組子集,然后針對每個分組再進行詳細的分析處理。這時要正確的分組運算就必須依賴于待分組集合中成員(文本日志的行)的次序了。

入學考試之后,把學生按成績排序蛇行分拆成兩個班,即名次1,4,5,8,...在一個,而2,3,6,7,...在另一個班,這樣能保證兩個班的平均名次是相同的。這個分組也可以用序號做出來:

  1. A.sort@z(score).group(#%4<2

這里用的分組值不再是常見的普通數值,而是一個布爾量,相當于按“真“值和“假”值分成兩個組,真值對應***個班,假值對應另一個班。本質上講,這還是個等值分組,只是用到的分組值可以是任意泛型。

顯然,這個分組的正確性也嚴重依賴于待分組集成的成員次序。

順便說一句,這又是一個只關注分組子集而不關心聚合值的例子。

按序號分組在很多情況下就是用序號來計算出分組依據,然后就變成普通的等值分組了。那么有沒有不能簡單地轉換成等值分組的情況呢?

2. 值變化分組

有一組嬰兒出生記錄,是按出生次序排序的,我們現在關心連續出生的同性別嬰兒數量超過5的有多少批?

簡單想,這就是先GROUP,計算每組COUNT值,然后數出有幾個大于5的。后兩步很簡單,問題是怎么GROUP?

直接按嬰兒性別分組當然是不對的,必須考慮次序,依次掃描記錄,當嬰兒性別發生變化時則產生一個新組。這種分組顯然沒法直接用等值分組做出來了。

我們可以提供一個有序分組方法來實現這種分組:當考察值發生變化時就產生一個新的分組。

  1. A.group@o(gender).count(~.len()>5)   // @o選項表示分組值變化時將產生新分組。 

用SQL就麻煩很多,需要先造成中間標志和變量來生成組的序號,大概是這樣

  1. SELECT COUNT(*) FROM 
  2.    (SELECT ChangeNumber FROM 
  3.         (SELECT SUM(ChangeFlag) OVER (ORDER BY birthday) ChangeNumber FROM 
  4.             (SELECT CASE WHEN gender=LAG(gender) OVER ( ORDER BY birthday) THEN 0 ELSE 1 END ChangeFlag FROM A)) 
  5.     GROUP ChangeNumber HAVING COUNT(*)>5) 

這樣的SQL,看懂都不是很容易的。而且必須借助birthday這種字段來形成次序,而前述的有序分組寫法在原數據有序時根本用不著這個信息。

這種場景同樣可能出現在文本分析中。每個用戶的事件日志可能多行,而且行數不確定,但寫日志時會在每個行開始處寫上用戶號。這樣我們可以按這個用戶號進行有序分組,它變化時就說明是另一個用戶的事件了。

即使是普通的等值分組,如果事先知道原集合對分組字段有序,也可以使用這種方案來實施,這將獲得更高的性能,比數據庫常用的HASH分組方案要快得多,而且特別適合大數據遍歷的情況。

3. 條件變化分組

再看一個著名的問題:一支股票最長連續上漲了多少天?

這個問題當然可以直接遍歷去解決,不過我們現在用分組的思路來處理,至少在SQL體系下只能這么做(嚴格些說,這是目前找到的最簡單可行的辦法)。

將股票收盤價按日期排序,然后將連續上漲的日期分到同一組,這樣只要考慮哪一組成員數最多即可。更明確地說,就是當某天上漲了,就把這一天和前一天分到一個組中,某天下跌了,則產生一個新組。

用SQL實現這個思路,同樣需要用中間標志和變量來生成組序號:

  1. SELECT MAX(ContinuousDays) FROM 
  2.     (SELECT COUNT(*) ContinuousDays FROM 
  3.         (SELECT SUM(RisingFlag) OVER (ORDER BY TradingDate ) NoRisingDays FROM 
  4.             (SELECT TradingDate, 
  5.                 CASE WHEN ClosingPrice>LAG(ClosingPrice) OVER (ORDER BY TradingDate THEN 0 ELSE 1 END) RisingFlag 
  6.             FROM A)) 
  7.     GROUP BY NoRisingDays) 

如果有專門的有序分組方法以及以前說過的有序遍歷語法,這個運算就很簡單了:

  1. A.sort(TradingDate).group@i(ClosingPrice<ClosingPrice[-1]).max(~.len())  //選項@i表示當條件成立時產生新分組 

與SQL不同,雖然實現思路完全一樣,但寫出來是分步的,而不是一個多層嵌套語句,書寫和理解都要容易得多。

同樣地,這種場景也會在文本分析中有用。不確定行數的日志中,有時會在事件分始時寫一個標志串,當掃描到這個標志串的時候就產生一個新的分組,有序分析的條件可設定為當前掃描行和指定文字相同,這樣就能保證同一事件的日志信息在同一個組中。

后兩種有序分組的情況,理論上當然也可以轉換成等值分組來處理(用SQL就要這么做,這也能從另一個側面說明SQL運算體系的完備性),但確實是相當麻煩的,所以我們一般不把它再當成等值分組來處理了。

到目前為止的分組討論,都是假定待分組集合已經準備好,其成員可以被隨機訪問到。但如果數據量巨大而不能全部讀入時,如果繼續做這種假定,會導致頻繁的外存交換而性能極差,這時需要再設計以流方式邊讀入邊分組并且邊聚合的運算體系。事實上日志分析中更常見的是這種情況,這些問題我們將再撰文研究,但基本方法思路仍然離不開上面這些內容。

責任編輯:趙寧寧 來源: 51CTO專欄
相關推薦

2017-10-18 22:34:33

SQL等值分組有序分組

2017-09-13 08:45:33

遍歷SQL運算

2017-12-26 15:33:24

JOINSQL運算

2017-09-27 08:25:35

SQL等值分組運算

2014-02-12 17:18:21

移動技術半月刊

2013-01-21 13:41:59

IBMdW

2011-08-31 14:04:18

IPv6網絡·安全技術周刊

2018-01-24 07:45:51

數據倍增分段列存

2018-01-18 20:47:18

CPU數據線程

2017-11-08 06:18:43

JOINSQL運算

2017-09-05 22:34:24

遍歷SQL運算

2018-01-01 23:28:37

JOIN維度數據分析

2018-02-06 23:30:07

文件存儲數據

2017-12-12 22:48:21

JOIN維度運算

2017-05-25 08:56:22

硬盤性能特征

2017-12-10 22:42:50

JOINSQL運算

2017-11-15 06:36:25

JOINSQL運算

2018-03-05 08:13:13

臨時性計算編程語言

2017-06-14 23:08:29

報表數據計算層

2018-01-10 15:25:43

JOIN維度SQL
點贊
收藏

51CTO技術棧公眾號

国产成人综合精品在线| 在线视频国产福利| 国产精品毛片久久| 中文日韩在线观看| 爱情岛亚洲播放路线| 欧美日韩一区成人| 中文字幕在线看| 亚洲精品视频自拍| 538在线视频观看| 成人国产在线观看| 成人国产在线看| 久久se精品一区精品二区| 欧美日韩精品免费看| 在线看片一区| 99电影网电视剧在线观看| 日韩中文在线电影| 国产精品久久久久一区二区| 精品福利网址导航| 欧美成人午夜激情在线| 久久9999免费视频| 欧美激情aaaa| 久久免费视频66| 欧美一区深夜视频| 婷婷精品视频| 国产精品自拍小视频| 久久国产亚洲| 91原创国产| 国产日韩欧美一区在线| 天天爽天天狠久久久| 精一区二区三区| 日韩视频在线观看视频| 国产一区二区日韩精品| av在线播放亚洲| 国产日韩精品一区二区浪潮av| 亚洲综合欧美在线| 一区二区三区免费在线观看| 午夜成人影视| 91精品国产高清一区二区三区| 美女尤物在线视频| 国产亚洲一区二区精品| 日韩免费高清视频网站| 久久精品国产第一区二区三区| 91久久国产综合久久91精品网站| 欧美天天在线| 亚洲国产精品www| 成人免费黄色大片| 成视频免费在线看| 在线亚洲免费视频| 欧美6一10sex性hd| 久久这里有精品| 国模精品一区| 欧美午夜欧美| www一区二区| 中文av在线播放| 精品国精品国产| 涩涩屋成人免费视频软件| 成人av资源在线播放| 性高湖久久久久久久久| 国产男女在线观看| 色噜噜偷拍精品综合在线| 国产蜜臀在线| 久久免费视频这里只有精品| 一区二区三区四区电影| av日韩在线看| 午夜电影网一区| 电影一区二区三| 国产精品91久久| 麻豆国产精品官网| 黄色三级电影网站| 日韩一区二区精品在线观看| 精品视频一二| 国产伦精品一区二区三区照片91 | 99热国内精品| 一本二本三本亚洲码| 中文字幕一区二区三区不卡在线| 午夜视频在线| 欧美日韩高清区| 亚洲二区精品| 成人久久久久久久久| 欧美在线一区二区三区| 久久精品97| 国产日韩欧美精品| 国产精品热久久久久夜色精品三区 | 亚洲精品成人av| 亚洲制服一区| 中文字幕色一区二区| 亚洲黄网站在线观看| 色哟哟入口国产精品| www.26天天久久天堂| 精品一区二区三区免费看| 色综合久久久久久中文网| 日本久久黄色| 潘金莲一级淫片aaaaaa播放1| 97久久久精品综合88久久| 国产视频1区2区3区| 欧美肥婆姓交大片| 午夜伦理在线| 欧美一级高清免费播放| 久久激情五月婷婷| 91社区在线| 国产精品99免视看9| 91女神在线视频| 丁香影院在线| 国产九色精品| 激情久久av一区av二区av三区| 亚洲午夜国产成人| 亚洲一区美女| 色综合久久天天综合网| 欧美三级自拍| 免费无遮挡无码永久视频| 精品三级在线看| 亚洲黄页一区| 日韩毛片在线一区二区毛片| 97视频在线观看免费高清完整版在线观看 | 欧美影院精品| av影院在线播放| 精品成人在线观看| 亚洲欧美日韩专区| 日本精品在线| 精品国产综合区久久久久久| 欧美午夜激情小视频| 欧美aaaa视频| 最新国产在线| 毛片av一区二区三区| 亚洲男同gay网站| 精品伦精品一区二区三区视频| 欧美日韩国产在线| 久久大综合网| 无线免费在线视频| 91传媒视频免费| 欧美专区亚洲专区| 在线免费高清一区二区三区| 国产资源在线播放| 岛国视频一区| 欧美人xxxx| 亚洲欧美清纯在线制服| www.亚洲资源| 精品无码久久久久久久动漫| 制服丝袜av成人在线看| 久久国产成人| 美女尤物在线视频| 超碰成人在线免费观看| 一本色道久久88综合日韩精品| 国产v综合v亚洲欧| yiren22亚洲综合| 免费无码不卡视频在线观看| 色综合久久精品亚洲国产| 成人欧美一区二区三区在线播放| 亚洲综合欧美日韩| 在线观看日韩专区| 国产精品欧美综合在线| 欧美日韩精品一区二区视频| 色吊丝在线永久观看最新版本| 成人在线精品视频| 欧美日韩在线播| 久久99精品国产91久久来源| 国产精品亚洲欧美一级在线| 国产中文字幕第一页| 国产精选在线观看91| 亚洲九九九在线观看| 国产精品天美传媒| 国内精品久久久久久久影视麻豆| 98色花堂精品视频在线观看| 久久久999视频| 国产色综合天天综合网| 欧美一区二区女人| 成人一级黄色片| 牛牛影视一区二区三区免费看| 一二三区在线| av不卡在线免费观看| 欧美另类暴力丝袜| 在线视频一区二区免费| 国内精品久久久久影院薰衣草 | 九九精品在线播放| 亚洲成国产人片在线观看| av成人天堂| 99久久婷婷国产综合精品首页| 天天综合天天操| 久久99蜜桃综合影院免费观看| 一区二区三区视频观看| 亚洲一区二区三区三| 麻豆成人av在线| 精品国产123区| av老司机免费在线| 丁香资源影视免费观看| 色播五月综合| 欧美一区二区视频97| 精品福利av导航| 亚洲综合一区二区精品导航| 日本不卡视频在线观看| 麻豆精品少妇| 天堂av资源在线观看| 永久免费的av网站| 亚洲国产精品www| 热草久综合在线| 亚洲四色影视在线观看| 在线免费观看视频一区| 日本一区二区不卡视频| 国产毛片一区二区| 99精品免费|