输入:
名称年份 1. 2008年4月 2. 2009年3月3日 3. 2008年4月4日 4. b 2009 8 5. b 2008年5月蜂巢输出:
名称2008 2009 1. a 8 3 2. b 5 8
根据我的理解,您需要将每年的一些运行转入年份列
你需要sum函数,而不是max
select sum(case when year=2008 then run else 0 end) 2008_run, sum(case when year=2009 then run else 0 end) 2009_run, from table t1 group by name;
要找出每年前5名的得分手。
with table1 as ( select name, sum(runs) as RunsPerYear, year from myTable group by name, year ) table2 as ( select name, year, RunsPerYear, dense_rank() over (partition by name, year order by RunsPerYear) as rnk from table2 ) select name, year, RunsPerYear from table2 where rnk<=5;
固定年份:
select name, max(case when year=2008 then run end) as year_2008, max(case when year=2009 then run end) as year_2009, ... and so on from my_table group by name;
在Hive中无法动态生成此类列,但您可以先选择不同的年份,然后使用shell生成此SQL。