pivot是乙個非常實用的函式
pivot的格式:
select [原表字段1,2,3…] from [表名]但是hive裡面沒有自帶pivot函式,所以我們需要自己實現as [原表別名]
pivot( [聚合函式] ( [原表字段1] ) for [原表字段2] in ( [原表2值1],[原表字段2值2]… ) ) as [新錶別名]
首先建立一組資料
create
table
ifnot
exists pivot_test(
id int
,province string
,time string
,gdp int
)comment
'pivot_test'
;insert
into pivot_test
values(1
,'山東省'
,'q1',10
),(2
,'山東省'
,'q2',12
),(3
,'山東省'
,'q3',15
),(4
,'山東省'
,'q4',19
),(5
,'浙江省'
,'q1',12
),(6
,'浙江省'
,'q2',15
),(7
,'浙江省'
,'q3',18
),(8
,'浙江省'
,'q4',20
);select
*from pivot_test
;
資料如下
實現過程
select province
,sum(if(
time
='q1'
,gdp,
null
)) q1
,sum(if(
time
='q2'
,gdp,
null
)) q2
,sum(if(
time
='q3'
,gdp,
null
)) q3
,sum(if(
time
='q4'
,gdp,
null
)) q4
from pivot_test
group
by province
;
最終結果
province
q1q2
q3q4
山東省10
1215
19浙江省
1215
1820
當然如果列目比較多的話,就會比較麻煩
Hive當中實現pivot操作
0.背景 實際工作當中遇到這樣乙個問題,資料如下,但是我想通過sql將資料轉換成按列展示的形式,即常用的pivot透視操作。原始資料 id item value 1 a 10 2 b 21 1 b 15 2 a 20 次級目標格式 sql id itemvalue 1 a 10,b 15 2 a 2...
PIVOT函式,行轉列
pivot函式的格式如下 pivot 聚合函式 聚合列值 for 行轉列前的列名 in 行轉列後的列名1 行轉列後的列名2 行轉列後的列名3 行轉列後的列名n select from shoppingcart as c pivot count totalprice for week in 1 2 3...
MSSQL 採用pivot函式實現動態行轉列
環境要求 2005 在日常需求中常常會有行轉列的事情需求處理。假設不是動態的行,那麼我們能夠採取case when 羅列處理。在sql 2005曾經處理動態行或列的時候,通常採用拼接字串的方法處理。在2005以後新增了pivot函式之後,我能夠利用這樣函式來處理。1.動態sql注入式推斷函式 既然是...