WOW !! MUCH LOVE ! SO WORLD PEACE !
Fond bitcoin pour l'amélioration du site: 1memzGeKS7CB3ECNkzSn2qHwxU6NZoJ8o
  Dogecoin (tips/pourboires): DCLoo9Dd4qECqpMLurdgGnaoqbftj16Nvp


Home | Publier un mémoire | Une page au hasard

 > 

Gestion_d'informations.Mutationsvers_les_bases_de_données_relationnelles_langage_de_programmation_sq


par Jacques AMINI MUDUMBI
Université de Yaoundé 1 - Master II Recherche  2017
  

précédent sommaire suivant

Bitcoin is a swarm of cyber hornets serving the goddess of wisdom, feeding on the fire of truth, exponentially growing ever smarter, faster, and stronger behind a wall of encrypted energy

IV.5.4. Les fonctions de groupes

Ces choses étant dites, dans les exemples précédents, chaque ligne résultat d'un SELECT était calculée sur les valeurs d'une seule ligne de la table consultée. Il existe un autre type de SELECT qui permet d'effectuer des calculs sur l'ensemble des valeurs d'une colonne, au moyen de l'une des fonctions de groupe suivantes (toutes portent sur une expression, qui peut-être un attribut d'une table ou un attribut calculé) :

SUM(expr) Somme des valeurs

AVG(expr) Moyenne des valeurs

COUNT([DISTINCT] expr) Nombre de valeurs (différentes si

DISTINCT est présent)

COUNT(*) Compte toutes les lignes de la table

MIN(expr) ouMAX(expr) Minimum ou maximum des valeurs

VARIANCE(expr) ouSTDDEV(expr) Variance ou écart-type des valeurs Cas pratique : Donner le total des salaires des employés travaillant dans le département 10 :

SELECT SUM(salaire) AS som_salaires FROM employes WHERE _num_dep=10;

Calcul de résultats sur plusieurs groupes. Il est possible de subdiviser la table en groupes, chaque groupe étant l'ensemble des lignes ayant une valeur commune pour les expressions spécifiées. C'est la clause GROUP BY qui permet de découper la table en plusieurs groupes :

81

GROUP BY expr1, expr2, ...

Si l'on en tient compte du regroupement suivant une seule expression, ceci définit les groupes comme les ensembles de lignes pour lesquelles cette expression prend la même valeur. Si plusieurs expressions sont présentes, le groupement va s'effectuer d'abord sur la première, puis sur la seconde, et ainsi de suite : parmi toutes les lignes pour lesquelles expr1prend la même valeur, on regroupe celles ayant expr2identique, etc. Un SELECT de groupe avec une clause GROUP BY donnera une ligne résultat pour chaque groupe.

Cas pratique : Donner le total des salaires des employés pour chaque département :

SELECT_num_dep,SUM(salaire)AS som_salaires FROM employes GROUP BY _num_dep;

Sélection des groupes. De même que la clause WHERE permet de sélectionner certaines lignes, il est possible de ne retenir, dans un SELECT comportant une fonction de groupe, que les lignes répondant à un critère donné par la clause HAVING. Cette clause se place après la clause GROUP BY et son prédicat suit les mêmes règles de syntaxe que celui de la clause WHERE, à la différence près qu'il ne peut porter que sur des caractéristiques du groupe (fonction de groupe ou expression figurant dans la clause GROUP BY).

Cas pratique : Donner la liste des salaires moyens par fonction pour les groupes ayant plus de 2 employés :

SELECT fonction, COUNT(*) AS nb_employes, AVG(salaire) AS moy_salaires FROM employes GROUP BY fonction HAVING COUNT(*)>2;

Retenons que :

Dans la liste des colonnes résultat d'un SELECT comportant une fonction de groupe, ne peuvent figurer que des caractéristiques de groupe, c'est-à-dire soit des fonctions de groupe, soit des expressions figurant dans la clause GROUP BY. En effet, de manière générale, lorsqu'un attribut est sélectionné dans une clause SELECT, le résultat peut comporter de zéro à n valeurs ; cela pourrait provoquer des conflits si l'on utilisait conjointement des fonctions statistiques qui, elles, ne retournent qu'une seule valeur.

Un SELECT de groupe peut contenir à la fois les clauses WHERE et HAVING. La première sera d'abord appliquée pour sélectionner les lignes, puis les fonctions de groupe seront évaluées, et les groupes ainsi constitués seront sélectionnés suivant le prédicat de la clause HAVING.

82

Cas pratique : Pour les départements comportant au moins 2 employés techniciens ou commerciaux, donner le nombre de ces employés par département :

SELECT _num_dep, COUNT(*) AS nb_techn_ou_comm FROM employes WHERE fonction in('Technicien','Commercial')

GROUP BY _num_dep HAVING COUNT(*)>=2;

- Un SELECT de groupe peut être utilisé dans une sous-interrogation ; inversement, une clause HAVING peut comporter une sous-interrogation.

précédent sommaire suivant






Bitcoin is a swarm of cyber hornets serving the goddess of wisdom, feeding on the fire of truth, exponentially growing ever smarter, faster, and stronger behind a wall of encrypted energy








"Et il n'est rien de plus beau que l'instant qui précède le voyage, l'instant ou l'horizon de demain vient nous rendre visite et nous dire ses promesses"   Milan Kundera