#sql #postgresql
#sql #postgresql
Вопрос:
У меня есть одна такая таблица.
A Sum
5 40
9 40
3 40
4 30
6 20
Я хочу получить верхнюю строку 1 на основе столбца суммы — в данном случае это 5,40
так, но сумма 40 также находится в других строках, поэтому я хочу, чтобы все остальные строки имели максимальную сумму. Итак, запрос должен возвращать 5,40 | 9,40 | 3,40
Ответ №1:
Как и Mysql, запрос Postgresql будет просто:
select * from your_table where sum = (select sum from your_table order by sum desc limit 1);
Ответ №2:
Для этого вы можете использовать функцию window dense_rank()
:
select a, sum
from (
select a,sum, dense_rank() over (order by sum desc) as rnk
from the_table
) t
where rnk = 1;
Ответ №3:
Postgres 13 теперь поддерживает fetch first with ties
:
select t.*
from t
order by sum desc
fetch first 1 row with ties;
Вот скрипка db<> .