HIVE實現pivot函式

2021-10-23 07:37:15 字數 1539 閱讀 2699

pivot是乙個非常實用的函式

pivot的格式:

select [原表字段1,2,3…] from [表名]

as [原表別名]

pivot( [聚合函式] ( [原表字段1] ) for [原表字段2] in ( [原表2值1],[原表字段2值2]… ) ) as [新錶別名]

但是hive裡面沒有自帶pivot函式,所以我們需要自己實現

首先建立一組資料

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注入式推斷函式 既然是...