运行Hive查询时获取ParseException

时间:2018-11-09 19:52:57

标签: hadoop hive hql parseexception

我正在寻找薪水低于平均工资的员工人数。

我对蜂巢和挣扎有点陌生,有人可以解释我的陈述有什么问题并请我帮忙吗?

我的陈述-

SELECT COUNT(*) FROM(SELECT wage, AVG(wage) AS avgWage FROM emp_wages) WHERE wage < avgWage;

错误-

ParseException line 1:82 cannot recognize input near 'where' 'wage' '<' in subquery source

任何帮助表示赞赏!

4 个答案:

答案 0 :(得分:1)

语法错误。派生表应为别名。

(on "<KeyPress-Left>" (setf dx -1))
(on "<KeyPress-Right>" (setf dx 1))
(on "<KeyRelease-Right>" (setf dx 0))
(on "<KeyRelease-Left>" (setf dx 0))

明智的查询,需要进行更改。

SELECT COUNT(*) 
FROM (SELECT wage, AVG(wage) AS avgWage FROM emp_wages group by wage)  t --alias needed here
WHERE wage < avgWage;

答案 1 :(得分:0)

问题是AVG是聚合函数。如果要映射一对多关系,则需要使用交叉联接功能:

select 
  count(*), avg(v1.wage),
  sum(case when v.wage < v2.avgwage then 1 else 0 end) below_average
from 
emp_wages v cross join (select avg(wage) as avgwage from emp_wages) as v2

答案 2 :(得分:0)

SELECT COUNT(*) 
FROM (SELECT wage, AVG(wage) AS avgWage FROM emp_wages group by wage)avg --group by needed
WHERE wage < avgWage;

答案 3 :(得分:0)

正确的查询应为:

select count(*) where wage <(select avg(wage) from emp_wages);

由于工资和avgWage在子查询中,因此出现解析错误。