Я вижу три вопроса в вашем запросе:
1.) Hive не может сгруппировать по переменной, которую вы определили в блоке выбора по имени, которое вы дали ему сразу.Для этого вам, вероятно, понадобится подзапрос.
2.) Hive склонен показывать ошибки, когда операции sum
или count
не находятся в конце запроса.
3.)Хотя я не знаю, какова ваша цель, я думаю, что ваш запрос не даст желаемого результата.Если вы сгруппируете по empsal
, то не будет никакой разницы между empsal
и sum(empsal)
по дизайну.То же самое касается emphike
и sum(emphike)
.
Я думаю, что следующий запрос может решить эти проблемы:
select
a.empname,
a.tot_sal,
a.tot_hike,
if(a.tot_sal > 1000, exp(a.tot_hike), 0) as manager
from
(select
empname,
sum(empsal) as tot_sal,
sum(emphike) as tot_hike,
from employee
group by
empname
)a
Оператор if
эквивалентен вашему выражению case
,однако я нахожу это немного легче для чтения.
В этом примере вам не нужно группировать после подзапроса, потому что группировка выполняется в подзапросе a
.