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无法识别“版本”附近的输入