**:
1. 多行轉多列
原表test表儲存格式如下,希望進行優化
name
subject
score
張三語文
90張三
數學85
張三英語
92李四
語文75
李四數學
90李四
英語80
王五語文
95王五
數學100
王五英語98
name
chinese
math
english
張三90
8592
李四75
9080
王五95
10098
方法一:利用str_to_map函式
select name
,info['語文'] as chinese
,info['數學'] as math
,info['英語'] as english
from (select name,str_to_map(concat_ws(',',collect_set(concat_ws(':',subject,cast(score as string))))) as info
from test
group by name
) a
方法二:利用case when函式
select name
,max(case when subject = '語文' then score else 0 end) as chinese
,max(case when subject = '數學' then score else 0 end) as math
,max(case when subject = '英語' then score else 0 end) as english
from test
group by name
2. 多列轉多行在資料視覺化時如果表很寬很短會顯得不那麼好看,這個時候可以將資料轉成瘦長的格式
date
uvnewuv
video
newvideo
vvvip_num
new_vip_num
2019-05-10
5000000
200000
3000000
10000
20000000
500000
80000
date
label
value
2019-05-10
uv5000000
2019-05-10
新增uv
200000
2019-05-10
3000000
2019-05-10
10000
2019-05-10
20000000
2019-05-10
會員數500000
2019-05-10
新增會員數
80000
實現方法:
select a.date
,b.label
,b.value
from (select *
from daily_report
) a
lateral view explode (map(
'uv', uv
,'新增uv', newuv
,'會員數', vip_num
,'新增會員數', new_vip_num
)) b as label, value
hive多行轉多列
一 需求 需要將多行的資料,按照某個維度轉換為一行。轉換前 轉換後 db price area name 為 東北 的total price actual db qty area name 為 東北 的qty。二 解決方案 1 sql select brand,max case when area ...
行列轉換之 多行轉多列,多列轉多行實踐版
行列轉換之 多行轉多列,多列轉多行實踐版 參考 深入行列轉換 多行轉多列,多行的計算 參考 sql server動態行列轉換 要求 實操演示 1.全表 select from temp2 2.構造row number select row number over partition by a ord...
hive 相同key 多行多列合併 處理
在join 的過程中我們很容易出現資料膨脹現象,即一行變成多 況。面對這種情況,一般會有兩種處理方式 第一種 用row number 等分窗函式,根據不同策略取不同行的資料 第二種 將相同key對應多行的情況合併成一行,如果一行有多個字段,還有可能合併為乙個欄位中 如源表結構 pcgid strin...