2010-04-11 15 views
54

que necesito para obtener el mayor valor de dos campos:La mayor valor a partir de dos o más campos

SELECT MAX(field1), MAX(field2) 

Ahora, ¿cómo puedo obtener el mayor valor entre estos dos?

+3

'GREATEST()' para el más grande similar 'LEAST() 'para el más pequeño. –

Respuesta

116

Es posible que desee utilizar la función GREATEST():

SELECT GREATEST(field1, field2); 

Si desea obtener el máximo absoluto de todas las filas, entonces es posible que desee utilizar la siguiente:

SELECT GREATEST(MAX(field1), MAX(field2)); 

Ejemplo 1:

SELECT GREATEST(1, 2); 
+----------------+ 
| GREATEST(1, 2) | 
+----------------+ 
|    2 | 
+----------------+ 
1 row in set (0.00 sec) 

Ejemplo 2:

CREATE TABLE a (a int, b int); 

INSERT INTO a VALUES (1, 1); 
INSERT INTO a VALUES (2, 1); 
INSERT INTO a VALUES (3, 1); 
INSERT INTO a VALUES (1, 2); 
INSERT INTO a VALUES (1, 4); 

SELECT GREATEST(MAX(a), MAX(b)) FROM a; 
+--------------------------+ 
| GREATEST(MAX(a), MAX(b)) | 
+--------------------------+ 
|      4 | 
+--------------------------+ 
1 row in set (0.02 sec) 
+0

no sé por qué, pero solo 'MÁS GRANDES (MAX (campo1), MAX (campo2))' está funcionando. Se devuelve otro número incorrecto (no el más grande) – Qiao

+1

@Qiao: Sí, necesitaría 'SELECT GREATEST (MAX (field1), MAX (field2));' para obtener el máximo absoluto de todas las filas. Si usa 'SELECT GREATEST (field1, field2);' obtendrá un conjunto de resultados con el máximo entre field1 y field2 para cada fila. –

+0

Eso es lo que estaba buscando Estaba seguro de que hay una función para esto, pero no tenía ni idea del nombre, ahora tiene perfecto sentido :) –

1
SELECT max(CASE 
       WHEN field1 > field2 THEN field1 
       ELSE field2 
      END) as biggestvalue 
FROM YourTable; 
6
mysql> SELECT GREATEST(2,0); 
     -> 2 

lo tanto, tratar:

mysql> SELECT GREATEST(MAX(field1), MAX(field2)); 
21

En caso de que usted está seleccionando los más grandes() para cada fila

SELECT GREATEST(field1, field2) 

Se volverá NULL si uno de los campos es NULL. Puede usar IFNULL para resolver esto

SELECT GREATEST(IFNULL(field1, 0), IFNULL(field2, 0)) 
Cuestiones relacionadas