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.條件過濾和提取分組表。