Импала SQL вернуть 3 лучших сгруппированных записи - PullRequest
0 голосов
/ 01 апреля 2020

У меня есть этот пример таблицы на импале. Я хочу получить максимальную вершину number_of_call для каждого абонента

caller и group_id уникально сгруппированы вместе

caller | group_id |number_of_call
  23   | 4433     | 12
  45   |  342     | 5
  23   |  475     | 33
  45   |  732     | 9
  46   |  4433    | 2
  23   |  522     | 5
  45   |  475     | 54
  23   |  342     | 32
  45   |  342     | 43

Ожидаемый результат

  caller   | group_id | number_of_call
     23    |   475    | 33
     23    |   342    | 32
     23    |   4433   | 12
     46    |   4433   | 2
     45    |   475    | 54
     45    |   342    | 43
     45    |   732    | 9

1 Ответ

1 голос
/ 01 апреля 2020

Вы можете использовать оконные функции, чтобы решить эту проблему с наибольшим числом групп:

select *
from 
    select t.*, row_number() over(partition by caller order by number_of_calls desc) rn
    from mytable t
) t
where rn <= 3
order by caller, rn

В подзапросе row_number() ранжирует записи, имеющие одинаковые caller, по убыванию number_of_calls. Затем внешние запросы фильтруются в верхних 3 записях по caller.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...