Как разделить значения столбца в другой столбец, используя куст - PullRequest
0 голосов
/ 22 февраля 2019

Для ввода:

 name year run
 1. a    2008 4
 2. a    2009 3
 3. a    2008 4
 4. b    2009 8
 5. b    2008 5

Выход в улье:

 name 2008 2009
 1. a 8 3
 2. b 5 8

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

Насколько я понимаю, вам нужно несколько прогонов в год, сгруппированных в столбцы года

Вам нужна функция суммы, а не макс.

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;
0 голосов
/ 22 февраля 2019

Для фиксированных лет:

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, но вы можете сначала выбрать разные годы и сгенерировать этот SQL с помощью оболочки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...