2011-02-06 42 views

Respuesta

31

Utilice esta:

select name 
from tbl 
where weight = (select max(weight) from tbl) 
+0

wow, lo tonto de mi parte no pensar en utilizar una consulta anidada! ¡Gracias! –

+7

Dependiendo del número de filas con valores de "peso" igual al valor máximo, esto puede devolver más de un nombre. Solo para tu información. –

+0

¿Cómo se hace que devuelva solo una de las filas con el valor máximo (no importa cómo lo elija)? –

66
SELECT name FROM tbl ORDER BY weight DESC LIMIT 1 

Mucho más performante que la otra respuesta y los resultados en una sola fila.

+5

Buena respuesta. También quiero señalar que si el peso tiene un índice, la ordenación se realizará en el índice y será más rápida. – bmlkc

+5

Buena respuesta, pero no devolverá dos resultados si dos personas tienen el mismo peso. – Stanislasdrg

+1

LÍMITE 1 requiere un escaneo completo de la tabla. Esto no es perfecto con muchas filas. Intenta ejecutar 'EXPLAIN' en tus consultas. – Volte

0

ORDER BY DESC pone filas con valores nulos en la parte superior.

para evitar volver resultados correspondientes a los valores nulos :

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

Nota: Esta consulta devolverá múltiples resultados si varias personas tienen un peso igual al peso máximo. Para obtener solo uno, agregue LIMIT 1 al final de la consulta.


Agradecimientos y más información:

Why do NULL values come first when ordering DESC in a PostgreSQL query?

MIN/MAX vs ORDER BY and LIMIT

Postgres MAX Function

Cuestiones relacionadas