Cours SQL ORACLE – 04 : Les fonctions d’agrégation
Les fonctions d’agrégation sont des fonctions utilisées dans les requêtes SQL et qui retournent toujours un seul résultat. Par exemple, compter les lignes d’une table, retourner le MAX des valeurs d’une colonne d’une table, etc.
- COUNT :
La fonction COUNT sert à compter les lignes d’une table ou d’une requête.
SELECT COUNT(*) FROM EMP ;
COUNT(*)
----------------------
14
Cette fonction ne peut pas retourner une valeur nulle même si la requête ne retourne aucun résultat :
SELECT COUNT(*) FROM EMP WHERE 1 = 2 ;
COUNT(*)
----------------------
0
Nous pouvons aussi utiliser la fonction COUNT pour compter le nombre d’enregistrement non vide dans une colonne. Pour cela :
SELECT COUNT(COMM) FROM EMP ;
COUNT(COMM)
----------------------
4
Nous pouvons aussi sélectionner le nombre d’enregistrement distinct dans une colonne en utilisant :
SELECT COUNT(DISTINCT JOB) FROM EMP ;
COUNT(DISTINCT JOB)
----------------------
5
Nous utilisons DISTINCT pour ne comptabiliser (ou ne sélectionner, dans le cas d’un SELECT normal) qu’une seule fois les enregistrements en double.
- MAX :
La fonction MAX retourne la valeur la plus grande d’une colonne d’une table ou d’une sélection
SELECT MAX(SAL) FROM EMP ;
MAX(SAL)
----------------------
5000
Il faut savoir que les colonnes nulles sont ignorées dans cette fonction. De plus si jamais nous exécutons cette fonction sur une colonne dont toutes ses valeurs sont nulles alors le résultat est nul aussi
SELECT MAX(COMM) FROM EMP WHERE COMM IS NULL ;
MAX(COMM)
----------------------
- MIN :
La fonction MIN retourne la valeur la plus petite d’une colonne d’une table ou d’une sélection
SELECT MIN(SAL) FROM EMP ;
MIN(SAL)
----------------------
800
Comme pour la fonction MAX, les colonnes nulles sont ignorées dans cette fonction. De plus si jamais nous exécutons cette fonction sur une colonne dont toutes ses valeurs sont nulles alors le résultat est nul aussi
SELECT MIN(COMM) FROM EMP WHERE COMM IS NULL ;
MIN(COMM)
----------------------
- SUM
Retourne la somme des valeurs d’une colonne d’une table ou d’une sélection. Cette fonction ne peut être utilisée qu’avec des champs numériques
SELECT SUM(SAL) FROM EMP ;
SUM(SAL)
----------------------
29025
Les valeurs nulles sont considéré comme des 0 par cette fonction et la sommes des valeurs nulles est nul
SELECT SUM(COMM) FROM EMP WHERE COMM IS NULL ;
SUM(COMM)
----------------------
- AVG:
La fonction AVG renvoie la moyenne de toutes les valeurs d’une colonne. AVG ne peut être utilisé qu’avec des champs numériques
SELECT AVG(SAL) FROM EMP ;
AVG(SAL)
----------------------
2073,214285714285714285714285714285714286
Il faut savoir qu’on ne peut jamais utiliser une fonction d’agrégation dans une requête SELECT avec d’autre colonne de la table. Par contre, nous pouvons utiliser dans le même SELECT plusieurs fonctions d’agrégat. Si nous exécutons cette requête
SELECT COUNT(*), MAX(SAL), MIN(SAL), SUM(SAL), AVG(SAL) FROM EMP ;
COUNT(*) MAX(SAL) MIN(SAL) SUM(SAL) AVG(SAL)
-------- -------- -------- -------- ----------
14 5000 800 29025 2073,214285714285714285714285714285714286
Exécutons maintenant la requête ci-dessous
SELECT SAL, COMM, COUNT(*) FROM EMP ;
Erreur commençant à la ligne 1 de la commande :
SELECT SAL, COMM, COUNT(*) FROM EMP
Erreur à la ligne de commande : 1, colonne : 7
Rapport d'erreur :
Erreur SQL : ORA-00937: la fonction de groupe ne porte pas sur un groupe simple
00937. 00000 - "not a single-group group function"
*Cause:
*Action:
Nous ne pouvons exécuter ce genre de requête que si on utilise GROUP BY.
Nous verrons dans le prochain cours la requête GROUP BY en détails.