Я работаю над HQL-запросом, который создает комбинации birthState / BirthMonth для определенных c критериев данных. Мне удалось отследить мою проблему до того, что мое предложение «Имеет» неправильно фильтрует результаты на основе моих агрегированных значений.
По сути, мне нужно отфильтровать комбинации birthState / birthMonth, в которых не более 5 человек, или менее 100 на летучих мышах. (оба условия должны быть соблюдены для сохранения строки).
with results as
(
select
m.bmonth as birth_month,
m.bstate as birth_state,
count(m.id) as total_players,
sum(b.hits) as total_hits,
sum(b.ab) as total_atbats,
dense_rank() over (order by sum(b.hits)/sum(b.ab)) as rank
from master m, batting b
where m.id = b.id
and m.bmonth is not null
and m.bstate is not null
and m.bstate != ""
group by m.bmonth, m.bstate
having total_players > 4 and total_atbats > 100
)
select
r.rank,
r.birth_month,
r.birth_state,
r.total_hits/r.total_atbats
from results r
Я относительно новичок в Hive по сравнению со стандартным SQL, но полагал, что этот код будет работать аналогичным образом. Какие-либо предложения? Спасибо.