Улей: запрос таблицы в соответствии с условиями - PullRequest
0 голосов
/ 26 сентября 2018

В Hive есть таблица со следующими данными.Что я пытаюсь поиграть с:

A   B   C   D 
==============
76  5   0.6 107777
78  5   0.5 107777
79  5   0.5 107777
79  5   0.5 107777
80  5   0.5 107777
210 5   0.5 107777
211 5   0.5 107777
213 5   0.5 107777
316 5   0.5 107777
316 5   0.5 107777
76  7   0.5 102997
78  7   0.5 102997
79  8   0.5 102997
79  8   0.5 102997
80  9   0.5 108997
80  9   0.5 108997
80  9   0.5 108997


Need to count the 'B and D' when B>4 and C is not same for B and D.

Ожидаемый O / P:

Здесь ищем значения, где значение в 'C' отсутствует для того же значения в 'А 'и' Б '.Наряду с отображением повторяющихся значений (более 1), присутствующих в таблице.

Value in 'C' is not present for the same value in 'A' and 'B':

Это означает, что

A B C
=====
76 5 0.6 => OK
78 5 0.5 => OK
79 5 0.5 => OK 
79 5 0.5 => NOT OK (As C=0.5 shouldn't have repetitive value for same A and B value)
80 5 0.5 => OK.....




A   B   C   D 
==============
79  5   0.5 107777
316 5   0.5 107777
79  8   0.5 102997
80  9   0.5 108997
80  9   0.5 108997

Count: 5

Был в состоянии написать запрос для первой части, но не получитьлюбой прорыв для оставшейся части:

SELECT A,B,C,D FROM DB.TABLE1 WHERE B >1; 

, но не понимаю, как писать для последней части:

count the 'B and D' when B>4 and C is not same for B and D.

Любое предложение по этому вопросу будет действительно полезным.

Update_1:

Попробовал следующее:

 SELECT A,B,C,D FROM (SELECT * FROM TABLE1 WHERE B >4) t1 GROUP BY B,D HAVING countnum>1 LIMIT 20;

, но получил ошибку:

FAILED: SemanticException [Error 10025]: Line 1:197 Expression not in GROUP BY key '1'
hive> 

1 Ответ

0 голосов
/ 28 сентября 2018

Need to count the 'B and D' when B>4 and C is not same for B and D.

Ввод: table1

A   B   C   D 
==============
76  5   0.6 107777
78  5   0.5 107777
79  5   0.5 107777
79  5   0.5 107777
80  5   0.5 107777
210 5   0.5 107777
211 5   0.5 107777
213 5   0.5 107777
316 5   0.5 107777
316 5   0.5 107777
76  7   0.5 102997
78  7   0.5 102997
79  8   0.5 102997
79  8   0.5 102997
80  9   0.5 108997
80  9   0.5 108997
80  9   0.5 108997

Запрос:

select count(*)
from (
  select *, row_number() over (partition by B, C, D) as rn
  from table1
  where B>4
) as t1
where rn=1;

Вывод: 5

Объяснение:row_number() дает номера строк на основе значений B, C и D.Для строк с одинаковыми значениями для этих трех переменных номер строки будет продолжать увеличиваться.

A   B   C   D       rn
======================
76  5   0.6 107777  1
78  5   0.5 107777  1
79  5   0.5 107777  2
79  5   0.5 107777  3
80  5   0.5 107777  4
210 5   0.5 107777  5
211 5   0.5 107777  6
213 5   0.5 107777  7
316 5   0.5 107777  8
316 5   0.5 107777  9
76  7   0.5 102997  1
78  7   0.5 102997  2
79  8   0.5 102997  1
79  8   0.5 102997  2
80  9   0.5 108997  1
80  9   0.5 108997  2
80  9   0.5 108997  3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...