Поиск вложенных максимальных значений postgresql

Предположим есть такая таблица (после join'ов)

Фрукт        | Сироп      | Вкус_фрукта | Вкус_сиропа  |
Яблоко       | Брусничный |  2          |   1          |
Яблоко       | Вишневый   |  2          |   2          |
Яблоко       | Персиковый |  2          |   3          |
Слива        | Брусничный |  1          |   1          |
....

Выборка select * from table where table.вкус_фрукта = (select max(table.вкус_фрукта) from table);

Результатом выполнения мы получим все яблоки (т.к они имеют один и тот же рейтинг) и разные сиропы. Вопрос: Как из результирующего списка получить максимальное значение сиропа, т.е Яблоко + Персиковый. Таких "вложенных максимумов" будет несколько. Т.е основной вопрос как находить такие максимумы с N вложенностями.


Ответы (1 шт):

Автор решения: Akina
WITH 
cte1 AS ( SELECT *, RANK() OVER (ORDER BY "Вкус_фрукта" DESC) rnk
          FROM src_table ),
cte2 AS ( SELECT *, RANK() OVER (ORDER BY "Вкус_сиропа" DESC) rnk
          FROM cte1
          WHERE rnk = 1 )
SELECT *
FROM cte2
WHERE rnk = 1

Ну или сразу

WITH 
cte AS ( SELECT *, RANK() OVER (ORDER BY "Вкус_фрукта" DESC, "Вкус_сиропа" DESC) rnk
         FROM src_table )
SELECT *
FROM cte
WHERE rnk = 1
→ Ссылка