Запрос верхней строки и других строк с эквивалентным значением суммы

#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<> .