【发布时间】:2011-06-22 02:23:57
【问题描述】:
例如:
name | weight
jon 100
jane 120
joe 130
如何只返回体重最大的人的姓名?
【问题讨论】:
标签: sql postgresql max
例如:
name | weight
jon 100
jane 120
joe 130
如何只返回体重最大的人的姓名?
【问题讨论】:
标签: sql postgresql max
如果您需要查找多行,例如每个人达到最大体重的日期:
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 name, max(weight), (array_agg(day ORDER BY weight DESC))[1] FROM tbl GROUP BY name
【讨论】:
ORDER BY DESC 将具有空值的行放在顶部。
为了避免返回对应于空值的结果:
SELECT name FROM tbl WHERE weight = (SELECT MAX(weight) FROM tbl);
注意:如果多人的体重等于最大体重,则此查询将返回多个结果。要仅获取一个,请将LIMIT 1 添加到查询的末尾。
致谢和更多信息:
Why do NULL values come first when ordering DESC in a PostgreSQL query?
【讨论】:
SELECT name FROM tbl ORDER BY weight DESC LIMIT 1
比其他答案的性能要好得多,并且只产生一行。
【讨论】:
EXPLAIN。
SELECT name FROM tbl WHERE weight IS NOT NULL ORDER BY weight DESC LIMIT 1 过滤掉具有 NULL 值的权重。
使用这个:
select name
from tbl
where weight = (select max(weight) from tbl)
【讨论】: