Come ottenere il massimo di due valori in MySQL?


289

Ho provato ma non ci sono riuscito:

mysql> select max(1,0);
ERRORE 1064 (42000): si è verificato un errore nella sintassi SQL; controlla il manuale
che corrisponde alla versione del tuo server MySQL per la giusta sintassi da usare 
vicino a "0)" alla riga 1

Risposte:


527

Usa GREATEST ()

Per esempio:

SELECT GREATEST(2,1);

Nota: ogni volta che un singolo valore contiene null in quel momento, questa funzione restituisce sempre null (Grazie a user @ sanghavi7)


41
una cosa deve tenere presente che ogni volta che se un singolo valore contiene null in quel momento questa funzione restituisce sempre null come risposta!
sanghavi7,

33
C'è ancheLEAST
bobobobo il

1
come posso eseguire una sotto query come parametro per GREATESTpoter ottenere valori per una colonna cirtain
Junaid Qadir

17
Per prevenire il problema con null è possibile utilizzare ifnull. Ad esempio, select greatest(date1, ifnull(date2, "0000-00-00 00.00:00")) from table1 where date2 is null;ti verrà data1.
Christoph Grimmer-Dietrich,

1
Se alcuni valori possono essere nulli, puoi farloGREATEST(COALESCE(column1, 0), COALESCE(column2, 0))
Sean the Bean,

27

Per ottenere il valore massimo di una colonna in un set di righe:

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

Per ottenere il valore massimo di un set di colonne, valori letterali o variabili per ogni riga:

SELECT GREATEST(column1, 1, 0, @val) FROM table; -- expect many results

3
Fai attenzione ai valori null con GREATEST. Qualsiasi valore null farà sì che la funzione restituisca null. Per evitarlo, puoi farloGREATEST(COALESCE(column1, 0), COALESCE(column2, 0))
Sean the Bean,

5

È possibile utilizzare la funzione MAGGIORE con campi non annullabili. Se uno di questi valori (o entrambi) può essere NULL, non utilizzarlo (il risultato può essere 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

È possibile modificare NULL sul valore predefinito preferito (se entrambi i valori sono NULL).


1
Ecco perché odio onestamente MySQL. Che enorme quantità di lavoro per fare una cosa così semplice.
Monica Heddneck,

9
Questo può essere semplicemente sostituito con select COALESCE(GREATEST(fieldA, fieldB),fieldA,fieldB) as maxValue. È complicato
Kyborek

1
Se alcuni valori possono essere nulli, puoi farloGREATEST(COALESCE(column1, 0), COALESCE(column2, 0))
Sean the Bean,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.