如何在postgres sql中找到列中的最大值?

39 sql postgresql max

例如:

name | weight
jon    100    
jane   120    
joe    130
Run Code Online (Sandbox Code Playgroud)

我如何只返回体重最大的人的名字?

rav*_*ren 84

SELECT name FROM tbl ORDER BY weight DESC LIMIT 1
Run Code Online (Sandbox Code Playgroud)

比其他答案更高效,并且仅产生一行.

  • @Volte和更高效的解决方案是 - ..? (6认同)
  • 好答案.我还想注意,如果权重有一个索引,则会对索引执行排序,并且会更快. (5认同)
  • 很好的答案,但如果两个人的体重相同,它将不会返回两个结果. (5认同)
  • LIMIT 1 需要全表扫描。这_不_具有很多行的性能。尝试对您的查询运行`EXPLAIN`。 (3认同)
  • 可以使用 WHERE: `SELECT name FROM tbl WHERE Weight IS NOT NULL ORDER BY Weight DESC LIMIT 1` 过滤掉具有 NULL 值的权重。 (3认同)
  • 如果 weight 中有任何 NULL,则返回 NULL (2认同)

Hao*_*Hao 38

用这个:

select name
from tbl
where weight = (select max(weight) from tbl)
Run Code Online (Sandbox Code Playgroud)

  • 根据值"weight"等于最大值的行数,这可能会返回多个名称.仅供参考. (7认同)

ale*_*sky 7

如果您需要查找多行,例如每个人体重最大的日期:

name | weight | day
don    110      1
don    120      20
don    110      30
joe    90       1
joe    80       15
joe    85       30
Run Code Online (Sandbox Code Playgroud)

即对于“don”你想要得到"don | 120 | 20",对于 joe 你想要"joe | 90 | 1",那么你可以写:

SELECT name, max(weight), (array_agg(day ORDER BY weight DESC))[1] FROM tbl GROUP BY name
Run Code Online (Sandbox Code Playgroud)