¿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

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)


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

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).


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.