For example:
name | weight
jon 100
jane 120
joe 130
How do I only return the name of the person with the largest weight?
For example:
name | weight
jon 100
jane 120
joe 130
How do I only return the name of the person with the largest weight?
Use this:
select name
from tbl
where weight = (select max(weight) from tbl)
SELECT name FROM tbl ORDER BY weight DESC LIMIT 1
Much more performant than the other answer and results in one row only.
ORDER BY DESC puts rows with null values at the top.
To avoid returning results corresponding to null values:
SELECT name FROM tbl WHERE weight = (SELECT MAX(weight) FROM tbl);
Note: This query will return multiple results if multiple people have a weight equal to the maximum weight. To grab just one, add LIMIT 1
to the end of the query.
Acknowledgements and more information:
Why do NULL values come first when ordering DESC in a PostgreSQL query?
MIN/MAX vs ORDER BY and LIMIT
Postgres MAX Function
If you need to find multiple rows, e.g. date on which each person had maximum weight:
name | weight | day
don 110 1
don 120 20
don 110 30
joe 90 1
joe 80 15
joe 85 30
i.e. for "don" you want to get "don | 120 | 20"
and for joe you want "joe | 90 | 1"
, then you can write:
SELECT (array_agg(name ORDER BY weight DESC))[1], max(weight), (array_agg(day ORDER BY weight DESC))[1] FROM tbl