2015-08-18 16 views
1

У меня есть две таблицыHive подзапрос и группа BY

Table1:

id 
1 
2 
3 

таблица 2:

id date 
1 x1 
4 x2 
1 x3 
3 x4 
3 x5 
1 x6 
3 x5 
6 x6 
6 x5 
3 x6 

Я хочу, чтобы подсчет каждого идентификаторами для таблицы 2, который присутствует в таблица 1.

id count 
1 3 
2 0 
3 4 

Я использую этот запрос, но его дает мне ошибку:

SELECT tab2.id, count(tab2.id) 
FROM <mytable2> tab2 
GROUP BY tab2.id 
WHERE tab2.id IN (select id from <mytable1>) 
; 

Ошибка:

missing EOF at 'WHERE' near 'di_device_id'

+1

вам нужно присоединиться к таблице 1, если вы хотите ограничить идентификаторы, представленные в таблице 1 – C8H10N4O2

ответ

3

Есть два возможных проблем. Sub-запросы в предложении WHERE поддерживаются только с Hive 0.13 и выше. Если вы используете такую ​​версию, то ваша проблема просто, что у вас есть где и GROUP BY навыворот:

SELECT tab2.id, count(tab2.id) 
FROM <mytable2> tab2 
WHERE tab2.id IN (select id from <mytable1>) 
GROUP BY tab2.id 
; 

Если вы используете более старую версию улья, то вам нужно использовать JOIN:

SELECT tab2.id, count(tab2.id) 
FROM <mytable2> tab2 INNER JOIN <mytable1> tab1 ON (tab2.id = tab1.id) 
GROUP BY tab2.id 
; 
+0

спасибо. это была проблема, я использовал «где» после группы. Спасибо большое. – user2200660

2

у вас есть две проблемы: -

  1. Where предшествует группе. В синтаксисе SQL вы используете having для фильтрации после группировки на!
  2. Куст не поддерживает все типы вложенных запросов в разделе Where. См. Здесь: Hive Subqueries

Однако ваш тип вспомогательного запроса будет в порядке. Попробуйте следующее: -

SELECT tab2.id, count(tab2.id) 
FROM <mytable2> tab2 
WHERE tab2.id IN (select id from <mytable1>) 
GROUP BY tab2.id; 

Это будет делать то же самое, что вы имели в виду.

Редактировать: Я только что проверил ответ @ MattinBit. Я не собирался дублировать ответ. Его ответ более полный!

+1

спасибо. это была проблема, я использовал «где» после группы. Спасибо большое. – user2200660

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

  • Нет связанных вопросов^_^