2015-07-03 3 views
1

У меня есть table-Эффективные подзапросы в улье

Employee Dept Visited 
1 a yes 
1  yes 
1  yes 
2 b 
1 b yes 
2  yes 
3 ab 
4 ac yes 
5  yes 
5  yes 
6 fe 
6 
7 ad yes 
2 ad yes 
3 a yes 
3 c 
6  yes 
7 
8 a yes 
8  yes 
9 fe yes 

*

Мне нужно найти все сотрудника, которые не имеют нулевые значения для 2 Depts с посетили = да

*

Я попытался написать запрос в Hive и после этого -

select c.Employee 
from table c 
where c.Employee NOT IN (select d.Employee from table d where Visited = 'Yes' and Dept = '' group by d.Employee having count(d.Employee) >=2) 
; 

Это работает, но этот запрос занимает много времени, поэтому я считаю, что это может быть лучше. Любое предложение

ответ

2

Я предложил бы использовать having и group by:

select c.Employee 
from table c 
group by c.Employee 
having sum(case when c.dept is null and c.visited = 'Yes' then 1 else 0 end) < 2; 
+0

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

+0

@ABC. , , Это на самом деле относительно небольшое изменение в запросе - удаление 'where' и модификация' have'. –

+0

это сработало, и это было быстро –

Смежные вопросы