SQL, как использовать JOIN и GROUPBY для отображения соответствующего регистра функции MAX - PullRequest
0 голосов
/ 30 января 2019

Я пытаюсь получить данные с помощью SQL-запроса на сервере Hadoop.У меня есть две таблицы:

t1

a  | b | c 
10  143  a  
23  163  g
24  536  r
55  475  a

t2

d  |  e |
143  bob
086  jim
536  jim
475  bob

Я пытаюсь объединить t1 с t2, основываясь на их общем столбце t1.b =t2.d, а затем сгруппируйте значения по e (bob, jim и т. д.), и оттуда извлеките максимальные значения a.(max (a) для jims - 24, max (a) для bob - 55).

Пока я могу присоединиться и сгруппировать по e, но не могу получить b для распечатки, так как функция GROUPBY ищет его.это заявляет, что это не агрегатная функция.Как мне заставить это работать должным образом, чтобы я мог запрашивать и получать таблицу, представляющую max (a), b и е.

SELECT max(a) as max_a, e
FROM (t1 left join t2 on t1.b=t2.d)
GROUP BY e

Это получает то, что мне нужно, но не может получить столбец bпоказать без ошибок.

Спасибо

1 Ответ

0 голосов
/ 30 января 2019

Не думаю, что вы хотите group by.Я думаю, что вы хотите, чтобы оконные функции:

SELECT t.*
FROM (SELECT t1.*, t2.e,
             row_number() over (partition by t2.e order by t1.a desc) as seqnum
      FROM t1 left join
           t2
           on t1.b = t2.d
     ) t
WHERE seqnum = 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...