Получение ParseException при выполнении запроса Hive - PullRequest
0 голосов
/ 09 ноября 2018

Я пытаюсь найти количество сотрудников, которым платят меньше, чем средняя заработная плата.

Я довольно новичок в улье и немного борюсь, может кто-нибудь объяснить, что не так с моим утверждением и помочь мне, пожалуйста?

Мое заявление -

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 голосов
/ 12 ноября 2018

Правильный запрос будет:

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

Вы получаете ошибку синтаксического анализа, так как заработная плата и avgWage находятся в подзапросе.

0 голосов
/ 10 ноября 2018

Проблема в том, что 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
0 голосов
/ 10 ноября 2018
SELECT COUNT(*) 
FROM (SELECT wage, AVG(wage) AS avgWage FROM emp_wages group by wage)avg --group by needed
WHERE wage < avgWage;
0 голосов
/ 09 ноября 2018

Синтаксическая ошибка. Производная таблица должна иметь псевдоним.

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
...