2010-04-11 22 views
54

ho bisogno di ottenere il più grande valore da due campi:grande valore da due o più campi

SELECT MAX(field1), MAX(field2) 

Ora, come posso ottenere più valore da questi due?

+3

'GREATEST()' per il più grande similmente 'MENO()' per il più piccolo. –

risposta

116

Si consiglia di utilizzare la funzione di GREATEST():

SELECT GREATEST(field1, field2); 

Se si desidera ottenere il massimo assoluto da tutte le righe, quindi si consiglia di utilizzare il seguente:

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

Esempio 1:

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

Esempio 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

non so perché, ma solo 'GREATEST (MAX (campo1), MAX (campo2))' funziona. Viene restituito il numero errato (non il più grande) – Qiao

+1

@Qiao: Sì, è necessario 'SELEZIONA GRANDE (MAX (campo1), MAX (campo2));' per ottenere il massimo assoluto da tutte le righe. Se si utilizza 'SELECT GREATEST (field1, field2);' si otterrà un risultato-set con il massimo tra field1 e field2 per ogni riga. –

+0

Questo è quello che stavo cercando ero sicuro che ci fosse una funzione per questo, ma non avevo idea del nome, ora ha perfettamente senso :) –

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

Quindi, cercare:

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

Nel caso in cui si sta selezionando il GREATEST() per ogni riga

SELECT GREATEST(field1, field2) 

Si tornerà NULL se uno dei campi è NULL. È possibile utilizzare IFNULL per risolvere questo

SELECT GREATEST(IFNULL(field1, 0), IFNULL(field2, 0)) 
Problemi correlati