當前位置:成語大全網 - 書法字典 - HiveSQL核心技能的窗口計算

HiveSQL核心技能的窗口計算

目標:

1,掌握sum()和avg()等聚合函數進行累計計算,學會限制行數(移動計算);

2.掌握row_number()、rank()和dense_rank()的排序函數;

3.掌握ntile()用於分組查詢的功能;

4、掌握lag()、lead()遷移分析功能。

窗口功能(Window function):

它類似於聚合函數,但是窗口函數為每壹行數據生成壹個結果。聚合函數可以根據規定將多行數據聚合成壹行。壹般來說,聚合後的行數要比聚合前少,但有時我們既想顯示聚合前的數據,又想顯示聚合後的數據,所以引入了window函數。窗口函數在select時執行,位於order by之前。

在日常工作中,經常會遇到計算截止到壹個月或壹天的累計值,可以通過Excel中的函數來實現。

在HiveSQL中,可以通過使用窗口函數來實現。

1)2018年月供總額和當年累計繳費總額。

2)按月分析公司2017和2018的付款總額,按年匯總。

說明:partition by in 1及以上起分組作用;

2.order by按什麽順序累加,升序ASC,降序DESC,默認升序。

3.正確的分組非常重要。除以後的字段是需要累計計算的區域,需要仔細了解。

(此功能可用於計算三天留存、七天留存和三十天留存。)

3)在2018中找到每個月最後三個月的平均支付金額。

用法:這三個函數的作用是返回對應規則的排序序號。因為排序函數不是輔助聚合計算,所以沒有必要使用子查詢。

4)2065 438+09+0 6月用戶購買商品的品類數量排名。

5)選擇支付金額在2019中排名為10、20、30的用戶。

6)將2019年6月的付費用戶按照付費金額分為5組。

7)選擇2019年退款金額前10%的用戶。

說明:Lag和Lead分析函數可以提取同壹字段的前N行數據(Lag)和後N行數據(Lead)作為同壹查詢中的獨立列。

在實際應用中,如果要取今天和昨天的差值,滯後和超前函數的應用尤為重要。

當然,這個操作可以通過表自連接來實現,但是Lag和Lead比左連接、右連接等自連接更高效,SQL語句更簡潔。

8)付費時間間隔超過100天的用戶數(這次購買距離下次購買是什麽時候?註意datediff函數是之前的日期)

9)2065 438+08年支付金額最高的TOP3用戶,各城市不分性別。

步驟摘要:

1.首先,篩選出每個用戶以及每個用戶的總消費金額;

2.連接兩個表以提取所需的字段;

3.對連接的表進行二次匯總計算,計算不同城市和性別的金額排名;

4.在二次聚合計算的表上進行條件篩選和提取。

10)各手機品牌退款金額前25%的用戶。

步驟摘要:

1.首先篩選出每個用戶以及每個用戶的總退款金額;

2.連接兩個表以提取所需的字段;

3、根據手機品牌對連接的表進行分組;

4.條件過濾和提取分組表。