MAX |
Maximum |
|---|---|
| Oracle Database SQL | Oracle 6 ou supérieure |
Syntaxe
| Max(argument) |
Paramètres
| Nom | Description |
|---|---|
| argument | Ce paramètre permet d'indiquer que le champ devant être comparer. |
Description
Cette fonction retourne la plus haute valeur d'une liste d'argument.
Remarques
- La fonction MAX fait partie des fonctions d'agrégation fondamentales en SQL : Elle permet de déterminer la valeur la plus élevée dans une colonne ou un ensemble de lignes, ce qui en fait un outil central pour les analyses statistiques simples.
- MAX peut être utilisée avec des types de données numériques, date/heure ou caractères : Dans le cas des chaînes de caractères, Oracle détermine la valeur "maximale" selon l'ordre lexicographique, ce qui peut surprendre si l'on s'attend à une comparaison numérique.
- Elle peut être combinée à la clause GROUP BY pour obtenir la valeur maximale dans chaque groupe : Par exemple, on peut extraire le plus grand salaire pour chaque département d'une entreprise, ce qui facilite les rapports hiérarchisés.
- Lorsqu'aucune ligne ne correspond à la requête, MAX retourne NULL, contrairement à certaines fonctions dans d'autres langages qui pourraient renvoyer zéro : Cela implique qu'il faut souvent prévoir un test de nullité dans les applications consommatrices.
- En mode analytique (MAX(...) OVER (...)), la fonction permet de récupérer la valeur maximale d'une fenêtre glissante ou partitionnée, sans agrégation du résultat : Cela est très utile pour enrichir chaque ligne avec un contexte global, comme le maximum dans un mois.
- MAX est déterministe, ce qui signifie qu'elle retournera toujours le même résultat pour le même jeu de données et les mêmes conditions : Cela garantit une reproductibilité parfaite des résultats en environnement de production.
- L'utilisation de MAX sur des colonnes comportant des valeurs NULL les ignore : Ce comportement permet d'obtenir des résultats fiables sans devoir filtrer manuellement les valeurs nulles dans la clause WHERE.
- Dans une sous-requête corrélée, MAX est souvent utilisée pour comparer des enregistrements entre eux, par exemple pour extraire le dernier événement, la valeur la plus élevée par client,.. : Cette approche est fréquente dans les systèmes décisionnels.
- L'usage de MAX sur une clé primaire ou un identifiant unique donne simplement la plus grande valeur insérée, souvent utile pour identifier la dernière ligne ajoutée : Toutefois, cela ne garantit pas qu'il s'agit de la ligne la plus récente chronologiquement (il faut pour cela une colonne de date explicite).
- Des index peuvent être utilisés par Oracle pour accélérer les recherches de maximum, notamment si la colonne est triée (index B-tree) : Cela rend les requêtes avec MAX potentiellement très performantes, surtout sur des tables volumineuses.
- L'usage de MAX sans clause GROUP BY dans une requête avec d'autres colonnes peut provoquer une erreur de groupe (ORA-00937) : Il faut alors utiliser une sous-requête ou une fonction analytique pour éviter cette limitation syntaxique.
- La fonction MAX peut également être utilisée dans des requêtes imbriquées pour des comparaisons conditionnelles complexes : Par exemple, on peut extraire la ligne associée à la valeur maximale via WHERE valeur = (SELECT MAX(...)), ce qui permet d'écrire des requêtes puissantes mais toujours lisibles.
Exemple
Voici un exemple permettant d'afficher les plus grandes valeurs en contournant le problème qu'il n'accepte pas une liste de valeurs directement comme paramètre dans la fonction :
- SELECT 'MAX(5,-18)=' AS Text,max(X) AS Result FROM (SELECT 5 AS X FROM DUAL UNION SELECT -18 AS X FROM DUAL) UNION
- SELECT 'MAX(0.25,0.115)=' AS Text, max(X) AS Result FROM (SELECT 0.25 AS X FROM DUAL UNION SELECT 0.115 AS X FROM DUAL) UNION
- SELECT 'MAX(1,2,3,4,5)=' AS Text,max(X) AS Result FROM (SELECT 1 AS X FROM DUAL UNION SELECT 2 AS X FROM DUAL UNION SELECT 3 AS X FROM DUAL UNION SELECT 4 AS X FROM DUAL UNION SELECT 5 AS X FROM DUAL) UNION
- SELECT 'MAX(5,4,3,2,1)=' AS Text, max(X) AS Result FROM (SELECT 5 AS X FROM DUAL UNION SELECT 4 AS X FROM DUAL UNION SELECT 3 AS X FROM DUAL UNION SELECT 2 AS X FROM DUAL UNION SELECT 1 AS X FROM DUAL) UNION
- SELECT 'MAX(24,34,13,72,100,1,34)=' AS Text, max(X) AS Result FROM (SELECT 24 AS X FROM DUAL UNION SELECT 34 AS X FROM DUAL UNION SELECT 13 AS X FROM DUAL UNION SELECT 72 AS X FROM DUAL UNION SELECT 100 AS X FROM DUAL UNION SELECT 1 AS X FROM DUAL UNION SELECT 34 AS X FROM DUAL);
on obtiendra le résultat suivant :
| Text | Result |
| MAX(5,-18)= | 5.000 |
| MAX(0.25,0.115)= | 0.250 |
| MAX(1,2,3,4,5)= | 5.000 |
| MAX(5,4,3,2,1)= | 5.000 |
| MAX(24,34,13,72,100,1,34)= | 100.000 |
Voir également
Article - Les géants de l'informatique - Oracle
Dernière mise à jour : Lundi, le 11 mai 2015