Как мне вернуть «верхнего члена каждой группы» в этой отсортированной таблице / списке? - PullRequest
0 голосов
/ 29 октября 2019

Итак, у меня есть таблица, которая выглядит следующим образом:

  WINS       MEMBER_ID     GROUP_ID
   2            45            1 
   2            65            1
   1            30            1
   1            20            2
   1            50            2 
   1            40            3

Итак, что я пытаюсь сделать, это вернуть верхний "Member_ID" в каждой GROUP (группы определяются GROUP_ID), определяемый числомиз побед;с прерывателем связи, идущим к участнику с более низким Member_ID #. (Таблица уже отсортирована / перечислена в «правильном порядке»).

Как получить победителя в каждой группе?

Требуемый вывод ниже:

MEMBER_ID
  45
  20
  40

Заранее спасибо.

(Правка, это то, что я пробовал):

SELECT max(player_id)
     , max(wins)
     , group_id
  FROM table;

(я знаю, что это неправильно, но я не уверен, какую аналитическую функцию мне придется использовать)

1 Ответ

2 голосов
/ 29 октября 2019

С небольшой помощью аналитических функций:

SQL> with test (wins, member_id, group_id) as
  2    (select 1, 40, 3 from dual union all
  3     select 1, 50, 2 from dual union all
  4     select 1, 20, 2 from dual union all
  5     select 1, 30, 1 from dual union all
  6     select 2, 65, 1 from dual union all
  7     select 2, 45, 1 from dual
  8    )
  9  select member_id
 10  from (select member_id, row_number() over (partition by group_id
 11                                       order by wins desc, member_id asc) rnk
 12        from test
 13       )
 14  where rnk = 1;

 MEMBER_ID
----------
        45
        20
        40

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