1. 程式人生 > 其它 >2021-01-26 行列轉換 case-when用法案例

2021-01-26 行列轉換 case-when用法案例

技術標籤:hivesqlsqlmysql資料庫hadoopspark

目錄

初始資料

列轉行

注意點1 group by + case-when+sum() 結合使用

注意點2 case-when用法

注意點3 特別字元無法識別處理

列轉行


行列轉換是統計、處理和展示資料常用的操作,也是case when一個重要的用法案例

資料如下,將part列轉行 內容為其對應的 price(價格)

初始資料

列轉行

SELECT 
project,company,
sum(case when part = 'SC12M5-1601003' then price else 0 end) as `SC12M5-1601003`,
sum(case part when 'SC12M5-1601006' then price else 0 end) as `SC12M5-1601006`
from t1
group by project,company

與常見的學生成績結果不同,因為不同專案/公司所承擔的part不同,我們給對應值為空的資料進行賦值0處理;

注意點1 group by + case-when+sum() 結合使用

project+compny+part 能夠確定一條price資訊,我們看到程式碼裡group by後面僅僅有project+compny,case-when 相當於一層篩選,在分組的條件下,滿足某一個part再取其對應的price,這樣說應該很清楚了吧。

而這裡的sum則要根據具體需求去寫了,本次的需求每個約束都只有一條結果(唯一的price),所以此處用sum、avg、max等都可以取到想要的;如果對應多條,就需要結合具體需求去選擇合適的分析函數了。

注意點2 case-when用法

case when 的兩種寫法,自己覺得哪一種舒服、容易理解就用哪一種;

--用法1
case when 欄位A需要滿足的什麼條件 then 操作1
     when ...
     else 操作n
end as 欄位B  --將操作的結果賦給欄位B

--用法2
case 欄位 when 條件1 then 操作1
          when 條件2 then 操作2
          ...
          else 操作n
end as 欄位B

但是在遇到複雜分析時候,就需要有選擇性使用了,從用法來看就一目瞭然,用法1適合不同欄位或者多欄位判斷,而用法2適合對單一欄位進行多次判斷

注意點3 特別字元無法識別處理

這也是這次為了給大家展示時候發現的,hive無法識別字符段裡面的‘-’,在給欄位命名的時候就出現了‘無法識別輸入’的報錯資訊,這時候可以

`SC12M5-1601003`  用  `  這個符號將所需字串括起來


該字串是英文輸入法下Esc按鍵下方的的波浪按鍵

列轉行

列轉行難度要稍微大一點,方法會根據資料量發生變化,本題比較好的辦法就是不同的part分開統計,再彙總