亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SPL 簡化 SQL 案例詳解:計算各組前 N 行

發布時間:2020-07-12 05:19:10 來源:網絡 閱讀:178 作者:raqsoft 欄目:大數據

取出各組的前N行數據是較常見的運算,比如:每個月每種產品銷量最高的五天是哪五天,每位員工漲薪最多的一次是哪次,高爾夫會員成績最差的三次是哪三次,等等。在SQL中,這類運算要用窗口函數以及keep/top/rownumber等高級技巧來間接處理,代碼難度較大。而且許多數據庫(如MySQL)還沒有這些高級功能,就只能用更復雜的JOIN語句和嵌套的子查詢來實現了。如果還涉及多層分組,多級關聯,計算過程會更加復雜。

而在SPL中,由于top函數可以按行號、最大值、最小值等方式取分組中的前N行,因此解決此類問題更加容易、清晰。下面就用一個例子來說明。

數據庫表golf存儲著多位會員的高爾夫得分情況,部分數據如下:

IDUSER_IDSCOREDATETIME
11352014-07-01 11:00:00
21172014-07-01 12:00:00
32362014-07-01 11:00:00
42272014-07-01 12:00:00
51662014-07-02 11:00:00
61772014-07-02 12:00:00
72932014-07-02 12:00:00
81272014-07-03 12:00:00
91482014-07-03 18:00:00
101362014-07-04 18:00:00
113772014-07-01 12:00:00
123682014-07-02 13:00:00
134252014-07-02 13:00:00

請取出每位會員成績最好的三次得分情況。

SPL代碼:


A
1=db.query("select * from golf")
2=A1.group(USER_ID)
3=A2.(~.top(-3;SCORE))
4=A3.union()
5>file("golf.csv").export@ct(A4)

A1:從數據庫取數。點擊該單元格,可以看到取數結果:

SPL 簡化 SQL 案例詳解:計算各組前 N 行

A2:=A1.group(USER_ID)。將A1的結果按照USER_ID,也就是會員分組,結果如下:

SPL 簡化 SQL 案例詳解:計算各組前 N 行

每行代表一組,其中是一個會員的所有得分記錄,雙擊淺藍色格子,可以看到組內成員,如下:

SPL 簡化 SQL 案例詳解:計算各組前 N 行

A3:= A2.(~.top(-3;SCORE))。計算出每組數據SCORE字段前三的記錄。這里的“~”表示每組數據,~.top()表示依次對每組數據應用函數top。函數top可以取得數據集的前N條記錄,比如top(3;SCORE)表示按SCORE升序排列,取前3條(即最小值);top(-3;SCORE)表示按降序排列,取前3條(即最大值,也就是這里的最好成績)。這一步的計算結果如下:

SPL 簡化 SQL 案例詳解:計算各組前 N 行

A4:=A3.union()。將各組數據合并,結果如下:

SPL 簡化 SQL 案例詳解:計算各組前 N 行

A5:>file("golf.csv").export@ct(A4)

將計算結果導出到" golf.csv "文件,以便通過excel等工具查看:

SPL 簡化 SQL 案例詳解:計算各組前 N 行

除了導出數據, SPL還可以直接被報表工具或java程序調用,調用方法和普通數據庫相似,使用它提供的JDBC接口即可向java主程序返回ResultSet形式的計算結果,具體方法可參考相關文檔。【Java如何調用SPL腳本】


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

皮山县| 鲁山县| 都江堰市| 讷河市| 大新县| 隆安县| 措勤县| 江永县| 进贤县| 广河县| 宁阳县| 平武县| 晋州市| 宁武县| 怀集县| 巴南区| 日喀则市| 二连浩特市| 姜堰市| 邛崃市| 工布江达县| 乌鲁木齐市| 阿拉善左旗| 大庆市| 四平市| 健康| 宾川县| 惠东县| 涡阳县| 鸡泽县| 红原县| 卓资县| 桑日县| 长丰县| 吕梁市| 奉节县| 元江| 铜鼓县| 玉树县| 睢宁县| 惠东县|