Поиск вложенных максимальных значений 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