web-dev-qa-db-ja.com

postgresqlの列の最大値を見つけるにはどうすればよいですか?

例えば:

name | weight
jon    100    
jane   120    
joe    130

最大体重の人の名前のみを返すにはどうすればよいですか?

36
diesel

これを使って:

select name
from tbl
where weight = (select max(weight) from tbl)
38
Hao
SELECT name FROM tbl ORDER BY weight DESC LIMIT 1

他の回答よりもパフォーマンスが高く、結果は1行のみです。

82
raveren

ORDER BY DESCは、null値を含む行を先頭に配置します

null値に対応する結果が返されないようにするには:

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

注:複数の人の体重が最大体重に等しい場合、このクエリは複数の結果を返します。 1つだけを取得するには、LIMIT 1をクエリの最後に追加します。


謝辞と詳細情報:

PostgreSQLクエリでDESCを注文するときにNULL値が最初に来るのはなぜですか?

最小/最大vs ORDER BYおよびLIMIT

Postgres MAX関数

2
Matt Kleinsmith

複数の行を見つける必要がある場合、例えば各人が最大体重を記録した日付:

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
0
alexkovelsky