Lolokai – Supervision, systèmes, réseaux, base de données…

0

Les fonctions (2eme partie)

Said ASSOUMANI 13 septembre 2012

Introduction

Dans l’article précèdent nous avons vu un des deux types de fonctions fournit par Oracle, à savoir les fonctions de ligne (single row). Aujourd’hui nous allons voir ensemble le deuxième et dernier type : les fonctions de groupe (multiple row ou encore fonction d’agrégation).

Les fonctions de groupe

Contrairement aux fonctions de ligne, les fonctions de groupe n’agissent pas sur une seule ligne. En effet, les fonctions que nous allons voir par la suite agissent sur la totalité ou une partie d’une colonne.

Voici une liste de fonctions de groupe que j’ai trouvé intéressant de présenter :

avg(expr) retourner la moyenne des valeurs de la colonne
count(expr) retourner le nombre de ligne non nul pour la colonne donnée
max(expr) retourner la valeur la plus élevée de la colonne
min(expr) retourner la valeur la plus  petite de la colonne
sum(expr) retourner le total (la somme) des valeurs de la colonne
variance(expr) retourner la variance des valeurs de la colonne
stdev(expr) retourner l’ecart type statistique des valeurs de la colonne

Voici trois  petits exemples d’utilisation de ces fonctions :

SELECT * FROM C1 ;

SELECT avg(age) FROM C1 ;

SELECT sum(age) FROM C1 ;

SELECT count(age) FROM C1 ;

Utilisation des fonctions de groupe avec des colonnes

Vous remarquerez que dans mes exemples j’ai utilisé que des fonctions de groupe et pas de colonne.Vous pouvez essayer, vous aurez une erreur :

SELECT lastname , SUM(age) FROM C1 ;

En soit c’est assez logique, votre « requête » essaie de retourner tous les prénoms de la table C1 alors que la fonction SUM(age) lui doit retourner qu’une seule valeur…

Pour pouvoir utiliser la colonne, on doit rajouter la clause : GROUP BY (nom_colonne…) , cette clause doit être mis après la clause WHERE , si elle existe.

Exemple :

SELECT lastname , SUM(age) FROM C1  GROUP BY(lastname) ;

Ici la requête va retourner pour chaque lastname identique la somme d’âge.

Dans notre cas, on n’a pas deux personnes avec le même nom , donc logiquement en SUM(age) on retrouve l’âge de chaque individu.

Si par exemple, il y avais un deuxième ‘Assoumani’ ayant par exemple 21 ans en SUM(age) pour le lastname ‘Assoumani’ on aurait eu 41 :) .

Les restrictions avec les fonctions de groupe

Nous avons vu dans un des articles précèdent que pour restreindre nos données nous devions utiliser la clause WHERE. Cette clause ne marche pas avec les fonctions de groupe (ce serais trop beau :p ).

Supposons que l’on veuille avoir les  noms de famille et sum(age)  avec sum(age) < 68.

Pour ce qui aimerait tenter ceci :

SELECT lastname, avg(age) FROM C1 WHERE sum(age) < 68 GROUP BY lastname;

Voilà ce qui vous attend:

En fait l’equivalent de la clause WHERE avec les fonctions de groupe  est la clause HAVING. Donc pour corriger notre erreur  , nous allons remplacer WHERE par HAVING:

SELECT lastname, avg(age) FROM C1 HAVING sum(age) < 68 GROUP BY lastname;

Conclusion

Voilà :) , nous avons vu à travers cet article ce que sont les fonctions de groupe et aussi comment les utiliser.  La partie sur les fonctions est maintenant complétée.

Dans le prochain article nous parlerons sur les Jointures.

Si vous avez des questions, suggéstions sur cet article ou même sur les précédente : laissez un commentaire, je réponds assez rapidement.Said ASSOUMANI

Laisser un commentaire

Login to your account

Can't remember your Password ?

Register for this site!