Comment obtenir le maximum de deux valeurs dans MySQL?

289

J'ai essayé mais j'ai échoué:

mysql> select max(1,0);
ERREUR 1064 (42000): vous avez une erreur dans votre syntaxe SQL; consultez le manuel
qui correspond à la version de votre serveur MySQL pour la bonne syntaxe à utiliser 
près de '0)' à la ligne 1
Masque
la source

Réponses:

527

Utilisez GREATEST ()

Par exemple:

SELECT GREATEST(2,1);

Remarque: chaque fois que si une seule valeur contient null à ce moment, cette fonction retourne toujours null (Merci à l'utilisateur @ sanghavi7)

NinethSense
la source
41
une chose doit garder à l'esprit que chaque fois que si une seule valeur contient null à ce moment-là, cette fonction renvoie toujours null comme réponse!
sanghavi7
33
Il y a aussiLEAST
bobobobo
1
comment puis-je exécuter une sous-requête en tant que paramètre pour GREATESTque je puisse obtenir des valeurs pour une colonne cirtain
Junaid Qadir
17
Pour éviter le problème avec null, vous pouvez utiliser ifnull. Par exemple select greatest(date1, ifnull(date2, "0000-00-00 00.00:00")) from table1 where date2 is null;, vous obtiendrez date1.
Christoph Grimmer-Dietrich
1
Si certaines valeurs peuvent être nulles, vous pouvez le faireGREATEST(COALESCE(column1, 0), COALESCE(column2, 0))
Sean the Bean
27

Pour obtenir la valeur maximale d'une colonne sur un ensemble de lignes:

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

Pour obtenir la valeur maximale d'un ensemble de colonnes, littéraux ou variables pour chaque ligne:

SELECT GREATEST(column1, 1, 0, @val) FROM table; -- expect many results
cs_alumnus
la source
3
Attention aux valeurs nulles avec GREATEST. Toute valeur nulle entraînera le retour de la fonction à null. Pour éviter cela, vous pouvez le faireGREATEST(COALESCE(column1, 0), COALESCE(column2, 0))
Sean the Bean
5

Vous pouvez utiliser la fonction GREATEST avec des champs non nullables. Si l'une de ces valeurs (ou les deux) peut être NULL, ne l'utilisez pas (le résultat peut être 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

Vous pouvez remplacer NULL par votre valeur par défaut préférée (si les deux valeurs sont NULL).

Leonid Zakharov
la source
1
C'est pourquoi je déteste honnêtement MySQL. Quelle quantité énorme de travail pour faire une chose aussi simple.
Monica Heddneck
9
Cela peut être simplement remplacé par select COALESCE(GREATEST(fieldA, fieldB),fieldA,fieldB) as maxValue. C'est trop compliqué
Kyborek
1
Si certaines valeurs peuvent être nulles, vous pouvez le faireGREATEST(COALESCE(column1, 0), COALESCE(column2, 0))
Sean the Bean