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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

「数据分析」Sqlserver中的窗口函数的精彩应用之数据差距与数据岛(含答案)...

發布時間:2023/12/4 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 「数据分析」Sqlserver中的窗口函数的精彩应用之数据差距与数据岛(含答案)... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

上一篇介紹過數據差距與數據島的背景,這里不再贅述,請翻閱上一文。此篇在Sqlserver上給大家演示1000萬條記錄的計算性能。

測試電腦軟硬件說明

一般般的筆記本電腦,2017年7月,價格:4500+。

電腦配置

數據構造

1000萬行數據,由10萬個用戶+每用戶100條記錄組成,同樣使用書中所提及的構造序列的表值函數輕松構造完成。

同樣使用窗口函數完成的表值函數生成1000萬條數據記錄數據源結構

使用循環和隨機函數,實現刪除10萬條數據,因測試時先建了索引再刪除數據,慢得一塌糊涂,最終中途中止了,沒有實際刪除這么多數據。

隨機刪除10萬條記錄,用于實現數據差距和數據島效果

關系型數據庫,性能優化的核心是適當的索引,此次肯定要加上索引才能客觀地表現出該有的合理效果。

增加聚集索引

算法代碼演示

數據差距范圍

此部分計算的邏輯是將每個用戶分組下本來連續的序號中,缺失了某些記錄,這些缺失的部分對應的區間范圍,若缺失的為連續的,返回連續的區間,若缺失為單個記錄,返回首尾相同的序號。

數據差距的SQL代碼及結果

原理:關鍵思路是使用LEAD函數,使用“用戶”列作分區,按序號的升序排列,取當前用戶組的當前行序號為cur列,其下一行內容作為nxt列,最終構造結構表是,將當前行的cur列值+1構造出差距的首范圍,當前行的nxt列值-1作為結束范圍。

而最終的結果只會取nxt和cur之差大于1的記錄,即開始有缺失產生差距的行記錄。

總記錄1000萬條,10萬個用戶,分組計算后,返回數據產距90899條記錄,用時27秒

分解下步驟,將CTE虛擬表C給大家看下效果,可以看到97和100之間是缺失了98、99兩值,最終在97序號上,cur為97、nxt為100,此行記錄是我們后面where條件要篩選出來的記錄行(模擬刪除數據過程中,盡量刪除連續的兩條記錄,讓差距結果更清晰)。

將cur+1,nxt-1后,就拿到98-99這樣的差距區間。

分步驟演示

數據島范圍

這個就是一般來說連續記錄的區間,如現實場景中的用戶連續打卡天區間。10萬個用戶測試,100天打卡天數,足夠滿足一般互聯網中等規模的活動場景使用。

數據島范圍的SQL代碼及結果

原理:使用排名窗口函數,對用戶進行分組計算。若有數據缺失時,排名的序號和正常序號之差會有跳躍性的差距(正常無缺失時序號和排名是相同,且差異為0)。

下一步對排名產生的相同的數值進行分組匯總,連同用戶字段,最終可統計出某用戶在某個差異值grp下的連續區間。

分解步驟后可知,在用戶1中,58后缺失了59、60兩個值,最終在61的排名與序號差grp為2,直到下一次有缺失時,此2的值再更新為下一個缺失的值區間長度2+2=4。

分步驟演示下一個缺失值為98和99兩值

結語

Sqlserver的窗口函數,非常多的應用場景,對傳統的SQL的查詢進行了極大的簡化,在PowerBI的DAX查詢語言中,暫時還缺少其在集合的基礎上進行窗口的處理,致使同樣都是對數據集合進行運算,但因為缺失窗口函數特性支持,性能上仍然和SQL中的窗口函數處理有非常大的差距。

現實場景更靠譜的是日期維度的數據序列,日期和序列原理一樣,只需使用DateAdd函數處理下即可,書中也有相應的例子,有興趣可自行翻閱。

想必有人好奇地問,這些內容在其他數據庫中是否同樣可以?窗口函數在其他關系型數據庫中是否也一樣支持?

據筆者知識范圍所知,MySQL和Sqlite是沒有的,Oracle是有的,并且比Sqlserver更強大(為何不推薦,因為筆者是微軟系的信徒唄,Oracle人家是法務團隊強大,你懂得)。

以上所使用到的截圖SQL語句,可公眾號后臺回復【數據島】獲得文本內容,立馬可以在自己電腦上搭建環境自行驗證分析,也期待你的更多留言、評論、轉發等互動參與,好讓筆者更有激情地分享更多精彩內容。

關于Excel催化劑

Excel催化劑先是一微信公眾號的名稱,后來順其名稱,正式推出了Excel插件,插件將持續性地更新,更新的周期視本人的時間而定爭取一周能夠上線一個大功能模塊。Excel催化劑插件承諾個人用戶永久性免費使用!

Excel催化劑插件使用最新的布署技術,實現一次安裝,日后所有更新自動更新完成,無需重復關注更新動態,手動下載安裝包重新安裝,只需一次安裝即可隨時保持最新版本!

Excel催化劑插件下載鏈接:https://pan.baidu.com/s/1Iz2_NZJ8v7C9eqhNjdnP3Q

聯系作者公眾號

取名催化劑,因Excel本身的強大,并非所有人能夠立馬享受到,大部分人還是在被Excel軟件所虐的階段,就是頭腦里很清晰想達到的效果,而且高手們也已經實現出來,就是自己怎么弄都弄不出來,或者更糟的是還不知道Excel能夠做什么而停留在不斷地重復、機械、手工地在做著數據,耗費著無數的青春年華歲月。所以催生了是否可以作為一種媒介,讓廣大的Excel用戶們可以瞬間點燃Excel的爆點,無需苦苦地掙扎地沒日沒夜的技巧學習、高級復雜函數的燒腦,最終走向了從入門到放棄的道路。

最后Excel功能強大,其實還需樹立一個觀點,不是所有事情都要交給Excel去完成,也不是所有事情Excel都是十分勝任的,外面的世界仍然是一個廣闊的世界,Excel只是其中一枚耀眼的明星,還有其他更多同樣精彩強大的技術、工具等。*Excel催化劑也將借力這些其他技術,讓Excel能夠發揮更強大的爆發!

關于Excel催化劑作者

姓名:李偉堅,從事數據分析工作多年(BI方向),一名同樣在路上的學習者。
服務過行業:零售特別是鞋服類的零售行業,電商(淘寶、天貓、京東、唯品會)

技術路線從一名普通用戶,通過Excel軟件的學習,從此走向數據世界,非科班IT專業人士。
歷經重重難關,終于在數據的道路上達到技術平原期,學習眾多的知識不再太吃力,同時也形成了自己的一套數據解決方案(數據采集、數據加工清洗、數據多維建模、數據報表展示等)。

擅長技術領域:Excel等Office家族軟件、VBA&VSTO的二次開發、Sqlserver數據庫技術、Sqlserver的商業智能BI技術、Powerbi技術、云服務器布署技術等等。

2018年開始職業生涯作了重大調整,從原來的正職工作,轉為自由職業者,暫無固定收入,暫對前面道路不太明朗,苦重新回到正職工作,對Excel催化劑的運營和開發必定受到很大的影響(正職工作時間內不可能維護也不可能隨便把工作時間內的成果公布于外,工作外的時間也十分有限,因已而立之年,家庭責任重大)。

和廣大擁護者一同期盼:Excel催化劑一直能運行下去,我所惠及的群體們能夠給予支持(多留言鼓勵下、轉發下朋友圈推薦、小額打賞下和最重點的可以和所在公司及同行推薦推薦,讓我的技術可以在貴司發揮價值,實現雙贏(初步設想可以數據顧問的方式或一些小型項目開發的方式合作)。


創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的「数据分析」Sqlserver中的窗口函数的精彩应用之数据差距与数据岛(含答案)...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。