У меня возникли проблемы с формулировкой запроса для следующей проблемы:
Для значений пары, которые имеют определенный балл, как вы группируете их таким образом, чтобы возвращать только отдельные значения пары с лучшими соответствующими баллами?
Например, скажем, у меня есть таблица со следующими значениями строк:
(t1,p1,65)
(t1,p2,60)
(t1,p3,20)
(t2,p1,60)
(t2,p2,59)
(t2,p3,15)
Первые два столбца указывают значения пары, а третий столбец представляет парную оценку. Лучший результат (t1,p1,65)
. Поскольку теперь используются t1 и p1, я хочу исключить их из дальнейшего анализа.
Следующий лучший результат - (t2,p2,59)
. Даже если (t1,p2)
имеет оценку 60, я хочу исключить его, потому что "t1" уже используется. (t2,p1)
также имеет оценку 60, но так как p1 также уже используется, эта пара исключается.
Это приводит к отдельным значениям парной пары:
(t1,p1,65)
(t2,p2,59)
Есть ли способ генерировать этот результат только с помощью запроса? Я пытался подумать о способах группировки и разбиения результатов, но так как должен быть некоторый учет значений, уже используемых в соответствии с рангом оценки, мне очень трудно подойти.
EDIT:
Чтобы сгенерировать данные:
with t(t, p, score) as (
(values ('t1','p1',65),
('t1','p2',60),
('t1','p3',20),
('t2','p1',60),
('t2','p2',59),
('t2','p3',15)
))
select t.* from t;