Hive 计算配置单元中两行之间的薪资差异
我有一张有以下列的表格-Hive 计算配置单元中两行之间的薪资差异,hive,hiveql,Hive,Hiveql,我有一张有以下列的表格- last_name, first_name, department, salary 我想计算工资低于100英镑的员工名单 给同一部门工资较高的直接员工。我找到了下面的答案,并尝试了一下,但我认为我做错了什么,因为我是新来的蜂巢 以下是我正在运行的查询- select last_name,first_name, salary from emp where 100 = LEAD(salary,1) OVER(PARTITION BY depart
last_name, first_name, department, salary
我想计算工资低于100英镑的员工名单
给同一部门工资较高的直接员工。我找到了下面的答案,并尝试了一下,但我认为我做错了什么,因为我是新来的蜂巢
以下是我正在运行的查询-
select last_name,first_name, salary from emp where
100 = LEAD(salary,1) OVER(PARTITION BY department ORDER BY salary)-salary;
请帮我解决这个问题。使用
case
表达式
SELECT last_name,
first_name,
salary
FROM (SELECT last_name,
first_name,
salary,
CASE
WHEN 100 > LEAD(salary, 1)
OVER(
PARTITION BY department
ORDER BY salary) - salary THEN 1
ELSE 0
END sal_flag
FROM emp)
WHERE sal_flag = 1;
配置单元强制每个子查询都有一个名称。我刚刚在Kaushik的查询中添加了这个名称。试试这个,它会有用的
SELECT last_name,
first_name,
salary
FROM (SELECT last_name,
first_name,
salary,
CASE
WHEN 100 > LEAD(salary, 1)
OVER(
PARTITION BY department
ORDER BY salary) - salary THEN 1
ELSE 0
END sal_flag
FROM employee) v
WHERE sal_flag = 1;
我个人更喜欢使用WITH子句,而不是下面的子查询。With子句使查询更具可读性。此外,它们通常会产生更好的执行计划
WITH sal_view
AS (SELECT last_name,
first_name,
salary,
CASE
WHEN 100 > LEAD(salary, 1)
OVER(
PARTITION BY department
ORDER BY salary) - salary THEN 1
ELSE 0
END sal_flag
FROM employee)
SELECT last_name,
first_name,
salary
FROM sal_view
WHERE sal_flag = 1;
试一试
我运行了此查询,它给出的错误为-FAILED:ParseException行15:0无法识别子查询中“WHERE”“sal_flag”“=”附近的输入source@R.Gold:很难模拟配置单元查询以找出问题所在。没有可用的在线蜂巢模拟器。查询在语法上是正确的,但无法理解hive的错误。因此,您需要进行反复试验和修改,以查看查询是否在您的环境中工作。
with temp as(
select last_name,
first_name,
department,
salary,
LEAD(salary, 1)
OVER( PARTITION BY department
ORDER BY salary) as diff
FROM emp
)
select ast_name,
first_name,
department,
salary
from temp
where diff >100