运行配置单元查询时获取parseexception

pieyvz9o  于 2021-06-01  发布在  Hadoop
关注(0)|答案(4)|浏览(447)

我想找出工资低于平均工资的雇员人数。
我对Hive还很陌生,有点挣扎,有人能解释一下我的说法有什么问题吗?
我的声明-

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 感谢您的帮助!

brjng4g3

brjng4g31#

问题是avg是一个聚合函数。如果要Map一对多关系,则需要使用交叉联接函数:

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
5fjcxozz

5fjcxozz2#

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

qc6wkl3g3#

语法错误。派生表应具有别名。

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

就查询而言,它需要改变。

select count(*)
from (SELECT wage, AVG(wage) over() AS avgWage 
      FROM emp_wages
     ) t
where wage < avgWage
qaxu7uf2

qaxu7uf24#

正确的查询是:

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

由于子查询中有wage和avgwage,您将得到一个解析错误。

相关问题