我想使用id计算sum和grouby,并将id转换为列标题,将sum作为值。
例如
ID|amount
1|100
1|200
2|100
最终输出
1|2
300|100
任何指针: 我试过下面的查询
select * from table pivot( sum(amount) for id in ("666","111"))
但是低于错误,我不知道我是否错过任何EOF
org.apache.spark.sql.AnalysisException: missing EOF at '(' near 'PIVOT'; line 1 pos 63
at org.apache.spark.sql.hive.HiveQl$.createPlan(HiveQl.scala:318)
答案 0 :(得分:0)
您可以使用条件聚合,因为Hive不支持pivot
。
select sum(case when id='111' then amount else 0 end),sum(case when id='666' then amount else 0 end)
from tbl
id='111'
返回boolean
,转换为int
进行求和。
这假设表中的ID数量有限。
答案 1 :(得分:-1)
Oracle / PLSQL中PIVOT子句的语法是:
SELECT * FROM
(
SELECT column1, column2
FROM tables
WHERE conditions
)
PIVOT
(
aggregate_function(column2)
FOR column2
IN ( expr1, expr2, ... expr_n) | subquery
)
ORDER BY expression [ ASC | DESC ];
包括分号。重新尝试并告诉我们。