當前位置:編程學習大全網 - 編程語言 - HiveSQL核心技能之表連接

HiveSQL核心技能之表連接

目標:

1、掌握HQL中的各種連接及其組合使用;

2、掌握數據分析中業務指標思路轉換的技巧;

3、區分好full join 和 union all 的使用場景;

4、在多表連接時,註意各種細節和業務邏輯;

5、復雜表連接要學會分步驟處理

需註意:

1、表連接時,必須進行重命名;

2、on後面使用的連接條件必須起到 唯壹鍵值 的作用(有時會有多個字段組合);

3、inner可省略不寫,效果是壹樣的

4、表連接時不能使用 a join b join c這種方式,不然會極度浪費電腦的資源和延長查詢時間,要在子查詢的表裏先做好篩選之後在連接;

1)找出在2019年購買後又退款的用戶(記得要去重)

註意:壹定要先去重,再做表連接,養成良好的習慣(雖然可以先連接再去重,但是那麽做會使執行效率很低)

2)在2017年和2018年都購買的用戶

3)在2017年、2018年、2019年都有交易的用戶

進行左連接之後,以左表為全集,返回能夠匹配上的右邊表的匹配結果,沒有匹配上的則顯示NULL。

拓展:

right join:以右表為全集,返回能夠匹配上的左邊表的匹配結果,沒有匹配上的則顯示NULL,可以由left join改寫出同樣的結果。

4)在2019年購買,但是沒有退款的用戶

5)在2019年由購買的用戶的學歷分布

6)在2017年和2018年都購買,但是沒有在2019年購買的用戶

查詢兩個表的所有用戶時使用full join是壹個比較好的方法(需要用到coalesce函數:

註:coalesce函數,coalesce(expression1,expression2,...,expression n),依次參考各參數表達式,遇到非null值即停止並返回該值,如果所有的表達式都是空值,最終將返回壹個空值。

註:表合並時字段名稱必須壹致,字段順序必須壹致,而且不用填寫連接條件

7)2017-2019年由交易的所有用戶數

union all 和 union 的區別:

union all 不會去重,不會排序,效率較快;union 會去重且排序,效率較慢。

如果表很大時,推薦先去重,再進行 union all ,不能直接對表進行 union all,不然效率很慢。

8)2019年每個用戶的支付和退款金額匯總

也可以使用 full join 的方式:

9)2019年每個支付用戶的支付金額和退款金額

10)首次激活時間在2017年,但是壹直沒有支付的用戶年齡段分布

步驟總結:

1、先篩選出年份為2017註冊的用戶;

2、沒有支付的人;

3、年齡段分布

註意:由於age也是在user_info的表格裏,第三步用的字段需要在第壹步進行預處理,所以在限制時間的時候需要同時對年齡段進行預處理,這樣在第三步的時候才會由年齡段這個字段;需要註意對 case when 的字段進行重命名才能進行後續的操作

11)2018、2019年交易的用戶,其激活時間段分布

步驟總結:

1. 取出2018和2019年所有的交易用戶的交集

2. 取出所有用戶的激活時間

3. 統計時間分布

  • 上一篇:理光詳細資料大全
  • 下一篇:C語言鼠標編程的問題,高手指教~~
  • copyright 2024編程學習大全網