pivot是一个非常实用的函数
PIVOT的格式:
SELECT [原表字段1,2,3…] FROM [表名]
AS [原表别名]
PIVOT( [聚合函数] ( [原表字段1] ) FOR [原表字段2] IN ( [原表2值1],[原表字段2值2]… ) ) AS [新表别名]
但是hive里面没有自带pivot函数,所以我们需要自己实现
首先创建一组数据
CREATE TABLE IF NOT 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 | q1 | q2 | q3 | q4 |
---|---|---|---|---|
山东省 | 10 | 12 | 15 | 19 |
浙江省 | 12 | 15 | 18 | 20 |
当然如果列目比较多的话,就会比较麻烦