Как найти наибольшее значение в столбце в Postgres SQL? - PullRequest
33 голосов
/ 06 февраля 2011

Например:

name | weight
jon    100    
jane   120    
joe    130

Как вернуть только имя человека с наибольшим весом?

Ответы [ 4 ]

79 голосов
/ 05 декабря 2012
SELECT name FROM tbl ORDER BY weight DESC LIMIT 1

Гораздо эффективнее, чем другой ответ, и результат только в одной строке.

36 голосов
/ 06 февраля 2011

Используйте это:

select name
from tbl
where weight = (select max(weight) from tbl)
2 голосов
/ 03 декабря 2017

ORDER BY DESC помещает строки с нулевыми значениями вверху.

Чтобы не возвращать результаты, соответствующие нулевым значениям :

SELECT name FROM tbl WHERE weight = (SELECT MAX(weight) FROM tbl);

Примечание. Этот запрос будет возвращать несколько результатов, если вес нескольких людей равен максимальному весу. Чтобы получить только один, добавьте LIMIT 1 в конец запроса.


Благодарности и дополнительная информация:

Почему значения NULL стоят первыми при упорядочении DESC в запросе PostgreSQL?

MIN / MAX против ORDER BY и LIMIT

Функция Postgres MAX

0 голосов
/ 03 ноября 2018

Если вам нужно найти несколько строк, например, дату, на которую каждый человек имел максимальный вес:

name | weight | day
don    110      1
don    120      20
don    110      30
joe    90       1
joe    80       15
joe    85       30

, то есть, для "don" вы хотите получить "don | 120 | 20", а для joe вы хотите "joe | 90 | 1", тогда вы можете написать:

SELECT (array_agg(name ORDER BY weight DESC))[1], max(weight), (array_agg(day ORDER BY weight DESC))[1] FROM tbl
...