отношение столбца улья - PullRequest
0 голосов
/ 02 мая 2018

У меня есть список данных, например:

number                  fruit
1                       apple
1                       banana
1                       orange
2                       orange
3                       orange
3                       grape
4                       apple

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

1                       apple
1                       banana
1                       orange
3                       orange
3                       grape

Ответы [ 2 ]

0 голосов
/ 02 мая 2018

Возможно, лучший способ - использовать оконные функции. Если в строках не может быть повторяющихся пар число / фрукты:

select number, fruit
from (select t.*, count(*) over (partition by number) as cnt
      from t
     ) t
where cnt >= 2;

Если вы можете иметь дубликаты и хотите 2 или более разных фруктов, вы можете сделать:

select number, fruit
from (select t.*,
             min(fruit) over (partition by number) as min_fruit,
             max(fruit) over (partition by number) as max_fruit
      from t
     ) t
where min_fruit <> max_fruit;

И, наконец, для этой ситуации вы можете эффективно сформулировать это в SQL для большинства баз данных как:

select t.*
from t
where exists (select 1 from t t2 where t2.number = t.number and t2.fruit <> t.fruit);

Однако я не думаю, что коррелированный подзапрос был бы эффективен в Hive (если это даже разрешено в вашей версии).

0 голосов
/ 02 мая 2018
select * from your_table
where number in (select number from your_table group by number having count(*) > 1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...