¿Cómo obtener el máximo de dos valores en MySQL?

289

Lo intenté pero fallé:

mysql> select max(1,0);
ERROR 1064 (42000): tiene un error en su sintaxis SQL; revisa el manual
que corresponde a la versión de su servidor MySQL para la sintaxis correcta para usar 
cerca de '0)' en la línea 1
Máscara
fuente

Respuestas:

527

Utilice GREATEST ()

P.ej:

SELECT GREATEST(2,1);

Nota: Siempre que si algún valor individual contiene nulo en ese momento, esta función siempre devuelve nulo (Gracias al usuario @ sanghavi7)

NinethSense
fuente
41
¡Una cosa debe tener en cuenta que siempre que si algún valor individual contiene nulo en ese momento, esta función siempre devuelve nulo como respuesta!
sanghavi7
33
También hayLEAST
bobobobo
1
¿Cómo puedo ejecutar una subconsulta como parámetro para GREATESTpoder obtener valores para una columna determinada?
Junaid Qadir
17
Para evitar el problema con nulo, puede usar ifnull. Por ejemplo select greatest(date1, ifnull(date2, "0000-00-00 00.00:00")) from table1 where date2 is null;, conseguirá tu cita 1.
Christoph Grimmer-Dietrich
1
Si algunos valores pueden ser nulos, puede hacerloGREATEST(COALESCE(column1, 0), COALESCE(column2, 0))
Sean the Bean
27

Para obtener el valor máximo de una columna en un conjunto de filas:

SELECT MAX(column1) FROM table; -- expect one result

Para obtener el valor máximo de un conjunto de columnas, literales o variables para cada fila:

SELECT GREATEST(column1, 1, 0, @val) FROM table; -- expect many results
cs_alumnus
fuente
3
Tenga cuidado con los valores nulos con GREATEST. Cualquier valor nulo hará que la función devuelva nulo. Para evitar esto, puedes hacerloGREATEST(COALESCE(column1, 0), COALESCE(column2, 0))
Sean the Bean
5

Puede usar la función MAYOR con campos no anulables. Si uno de estos valores (o ambos) puede ser NULL, no lo use (el resultado puede ser NULL).

select 
    if(
        fieldA is NULL, 
        if(fieldB is NULL, NULL, fieldB), /* second NULL is default value */
        if(fieldB is NULL, field A, GREATEST(fieldA, fieldB))
    ) as maxValue

Puede cambiar NULL a su valor predeterminado preferido (si ambos valores son NULL).

Leonid Zakharov
fuente
1
Es por eso que honestamente odio MySQL. Qué enorme cantidad de trabajo hacer algo tan simple.
Monica Heddneck
99
Esto puede ser simplemente reemplazado por select COALESCE(GREATEST(fieldA, fieldB),fieldA,fieldB) as maxValue. Es
demasiado
1
Si algunos valores pueden ser nulos, puede hacerloGREATEST(COALESCE(column1, 0), COALESCE(column2, 0))
Sean the Bean