Hiveql 配置单元查询以查找按部门划分的薪资最高的月份

Hiveql 配置单元查询以查找按部门划分的薪资最高的月份,hiveql,Hiveql,我的意见 Department Jan_sal Feb_sal Mar_sal civil 1 5 5 mech 2 7 2 civil 3 8 9 mech 6 4 4

我的意见

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
预期产量

Civil       Mar
Mech      Feb
Elec       Jan

有很多方法,这里有一些

选项1:排序数组

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
选项2:posexplode+行号

select  department
       ,elt (i,'Jan','Feb','Mar)

from   (select    t.department
                 ,pe.pos+1 as i
                 ,row_number() over (order by sum(pe.val) desc) as rn

        from      mytable t
                  lateral view posexplode(array(Jan_sal,Feb_sal,Mar_sal)) pe

        group by  t.department
                 ,pe.pos
        ) t

where   rn = 1

(1) 为什么一个部门在源表中有多条记录?(2) 从源表到预期输出的逻辑是什么?嗨,都都,谢谢你的回复,我需要每个部门每月最高的工资?实际上,它们更多的是员工、地点等栏。(1)每个部门位于公司的不同地点。(2) 首先我们需要根据部门找到每个月的总和,然后我们需要得到每个部门的最高月薪。在这里,您需要尝试自己编写代码。之后,如果你有问题,你可以张贴你已经尝试了一个明确的解释什么是不工作,并提供一个解决方案。我建议你读一个好的问题和答案。另外,请务必读取。您好,dudu,我得到了函数SORT_ARRAY的以下-->错误参数1必须是ARRAY,但找到了ARRAY。您好,抱歉,dudu,您的代码是正确的,但我收到了错误,因为我犯了一些错误,所以我发布了它。所以,请帮助我。您好,Dudu,您能告诉我此错误参数类型不匹配“mar_sal”的解决方案吗:函数SORT_数组的参数1必须是数组,但找到了数组。可能是配置单元版本问题(您使用的是哪一个?)。检查另一个解决方案。我正在使用cdh 4.7,是的,即使我尝试了第二次查询,我也收到了错误,如失败:ParseException行1:0无法识别“版本”附近的输入