Sukanya Karri Ответов: 1

Запрос Hive, чтобы узнать, в каком месяце самая высокая зарплата по отделам


0
down vote
favorite
my input

Department     Jan_sal      Feb_sal         Mar_sal

civil            1            5               5
mech             2            7               2
civil            3            8               9
mech             6            4               4
mech             5            6               6
Elec             4            5               3
mech             8            5               5
Elec             8            5               4
Expected output

Civil       Mar
Mech      Feb
Elec       Jan


Что я уже пробовал:

Я новичок в улье.

Но я пытаюсь написать подзапрос, и я попробовал ниже

select    department
         ,sort_array
          (
              array
              (
                  struct(-sum(Jan_sal),'Jan')
                 ,struct(-sum(Feb_sal),'Feb')
                 ,struct(-sum(Mar_sal),'Mar')
              )
          )[0].col2

from      mytable

group by  department


но я получаю ошибку типа --->
Argument type mismatch ''mar_sal'': Argument 1 of function SORT_ARRAY must be array<PRIMITIVE>, but array<struct<col1:bigint,col2:string>> was found.

Richard MacCutchan

Сообщение об ошибке говорит вам, в чем проблема, вам нужно изменить оператор массива, чтобы он соответствовал правилам.

1 Ответов

Рейтинг:
0

Member 13609332

вот решение вышеприведенной проблемы


select d.department,
       case
       when (d.maxJan>=d.maxFeb)
       and (d.maxJan>=d.maxMarch)
       then 'Jan'
       when (d.maxFeb>=d.maxJan)
       and (d.maxFeb>=d.maxMarch)
       then 'Feb'       
       when (d.maxMarch>=d.maxJan)
       and (d.maxMarch>=d.maxFeb)
       then 'March'
       else 'null'
       end as month 
       from (select department,max(jan_sal) maxJan,max(feb_sal) maxFeb,max(march_sal) maxMarch from mytable group by department)d;