例えば:
name | weight
jon 100
jane 120
joe 130
最大体重の人の名前のみを返すにはどうすればよいですか?
これを使って:
select name
from tbl
where weight = (select max(weight) from tbl)
SELECT name FROM tbl ORDER BY weight DESC LIMIT 1
他の回答よりもパフォーマンスが高く、結果は1行のみです。
ORDER BY DESCは、null値を含む行を先頭に配置します
null値に対応する結果が返されないようにするには:
SELECT name FROM tbl WHERE weight = (SELECT MAX(weight) FROM tbl);
注:複数の人の体重が最大体重に等しい場合、このクエリは複数の結果を返します。 1つだけを取得するには、LIMIT 1
をクエリの最後に追加します。
謝辞と詳細情報:
複数の行を見つける必要がある場合、例えば各人が最大体重を記録した日付:
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