GREATEST et LEAST en Oracle : différence avec MAX/MIN

GREATEST et LEAST renvoient la plus grande/petite valeur d'une ligne (≠ MAX/MIN qui agrègent les lignes). Exemples, piège des NULL et des types.

Illustration : GREATEST et LEAST Oracle

GREATEST et LEAST en Oracle renvoient respectivement la plus grande et la plus petite valeur parmi une liste d’expressions, évaluées sur une même ligne. Attention à ne pas les confondre avec MAX et MIN, qui agrègent des lignes. Voici la différence et des exemples utiles.

Publicité

Syntaxe

GREATEST(valeur1, valeur2, ...)   -- la plus grande
LEAST(valeur1, valeur2, ...)      -- la plus petite
SELECT GREATEST(10, 25, 7) AS max_val,   -- 25
       LEAST(10, 25, 7)    AS min_val    -- 7
FROM dual;

La différence cruciale avec MAX / MIN

GREATEST / LEASTMAX / MIN
Agit surplusieurs colonnes d’une même ligneplusieurs lignes d’une colonne
Typefonction ligne à lignefonction d’agrégation
Exempleplus grande de 3 dates d’une lignedate max de la table
-- GREATEST : la date la plus récente PARMI 3 colonnes
SELECT id, GREATEST(date_creation, date_maj, date_validation) AS derniere_action
FROM dossiers;

-- MAX : la date la plus récente DE TOUTE la table
SELECT MAX(date_creation) FROM dossiers;

Exemples pratiques

Borner une valeur (clamp)

-- ne jamais descendre sous 0 ni dépasser 100
SELECT LEAST(GREATEST(score, 0), 100) AS score_borne FROM tests;

Comparer des dates

SELECT GREATEST(date_livraison, date_commande + 7) AS date_engagement
FROM commandes;

⚠️ Le piège des NULL

Si une seule des valeurs est NULL, GREATEST et LEAST renvoient NULL :

SELECT GREATEST(10, NULL, 5) FROM dual;   -- NULL !

Protégez-vous avec NVL ou COALESCE :

SELECT GREATEST(NVL(a,0), NVL(b,0), NVL(c,0)) FROM t;

Le piège des types

Oracle convertit toutes les valeurs au type de la première. GREATEST(10, '25') compare en numérique (car 10 est un nombre) ; GREATEST('10', '25', '7') compare en texte → ‘7’ > ’25’ ! Veillez à l’homogénéité des types.

FAQ

GREATEST ou MAX : lequel choisir ?

GREATEST pour comparer des colonnes d’une même ligne ; MAX pour le maximum d’une colonne sur plusieurs lignes.

Pourquoi mon GREATEST renvoie NULL ?

Une des valeurs est NULL. Enveloppez chaque argument dans NVL/COALESCE pour neutraliser les NULL.

Combien d’arguments peut-on passer ?

Plusieurs, sans limite pratique : GREATEST(a, b, c, d, …).

Un nouveau tutoriel SQL par semaine

Nous ne spammons pas ! Consultez notre politique de confidentialité pour plus d’informations.

Publicité

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Cours SQL & Oracle — 100% gratuitVoir les cours →