SIO SLAM1: Exploitation d’un schéma de données Chapitre 1 : Les fonctions de regroupement Et agrégats
Regroupements et agrégats La fonction de regroupement. Les agrégats sur regroupements. Les sélections sur agrégats. .
Regroupements et agrégats La fonction de regroupement. Les agrégats sur regroupements. Les sélections sur agrégats. .
Fonction de regroupement Lorsque la projection renvoie plusieurs occurrences identiques, cela crée une gêne pour l'exploitation. La solution que nous avons mise en place est de préfixer la projection de l'option distinct, qui permet d'éliminer ces doublons. Toutefois, il est possible de considérer chaque ensemble de doublons comme des regroupements de ligne sur lesquels il est possible de faire des calculs : compter le nombre de ligne de chaque regroupement, calculer le cumul d'un champ pour chaque regroupement, … ,
Fonction de regroupement L'avantage de l'emploi de la fonction de regroupement est qu'il n'y a plus à s'inquiéter des doublons d'occurrences dans la projection. Forme générale d'une requête : select <projection> from <table1> inner join <table2> on<champTable1> = <champTable2> [ where <sélection> ] group by <liste des champs de regroupement> [ order by <champ> [ <optionTri> ] ] ,
Fonction de regroupement Remarque importante : A chaque fois que vous pouvez dire il faut déterminer ... pour chaque <critère>, le critère vous donne une idée des champs de regroupement. Il est indispensable qu'il y ait au moins un identifiant. Pour chaque élève, Pour chaque devis, Pour chaque produit, … ,
Gestion des élèves Elève - elvId - elvNom - elvPrénom - elvDateNaiss - elvClasse Classe - clCode - clLib - clNiveau FK elvClasse = clCode PK ,
Gestion des élèves Voici un extrait de la table Elève : ,
Gestion des élèves Donnez la liste des occurrences que pourrait renvoyer la requête suivante, et entourez chaque groupe créé par la fonction de regroupement : Select elvPrénom From Elève Group by elvPrénom ,
Gestion des élèves Donnez la liste des occurrences que pourrait renvoyer la requête suivante, et entourez chaque groupe créé par la fonction de regroupement : Select elvClasse From Elève Group by elvClasse .
Regroupements et agrégats La fonction de regroupement. Les agrégats sur regroupements. Les sélections sur agrégats. .
Regroupements et agrégats La fonction de regroupement. Les agrégats sur regroupements. Les sélections sur agrégats. .
Les agrégats L'agrégat count(*) permet de compter le nombre de lignes de chaque groupe créé par la fonction de regroupement. ,
Les agrégats Select elvPrénom, count(*) Donnez la liste des occurrences que pourrait renvoyer la requête suivante : Select elvPrénom, count(*) From Elève Group by elvPrénom ,
Les agrégats Select elvClasse, count(*) Donnez la liste des occurrences que pourrait renvoyer la requête suivante : Select elvClasse, count(*) From Elève Group by elvClasse ,
Les alias La fonction s'alias est utilisée pour renommer un champ ou une table. Ainsi, les champs renvoyés par le projection suivante : Select elvId Identifiant, elvNom NomFamille, elvPprénom Prénom, elvDateBorn DateNaissance From Elève Sont : ,
Les autres agrégats D'autres agrégats sont disponibles : avg (<nomChamp>) permet de calculer la moyenne des valeurs contenues dans le champ précisé. Il faut que ce soit un champ de type numérique. sum (<nomChamp>) permet de calculer la somme totale des valeurs contenues dans le champ précisé. Il faut que ce soit un champ de type numérique. ,
Les autres agrégats D'autres agrégats sont disponibles : min (<nomChamp>) permet de déterminer la plus petite valeur des valeurs contenues dans le champ précisé. Il faut que ce soit un champ de type numérique, chaîne ou date. max (<nomChamp>) permet de déterminer la plus grande valeur des valeurs contenues dans le champ précisé. Il faut que ce soit un champ de type numérique, chaîne ou date. ,
Les autres agrégats D'autres agrégats sont disponibles : Il existe d'autres agrégats, à découvrir au besoin... Il est également possible d'effectuer des opérations mathématiques additions, multiplication, … entre les champs d'une même projection, y compris les agrégats. ,
Exercice devis produit client contenu , - devNum - devDate - devEtat - nbrMO - cliNum produit - prodRef - prodDes - prodPU - prodUMesure client - cliNom - cliRue - cliCP - cliVille - cliTel contenu - quantité PK cliNum = cliNum FK FK devNum = devNum PK FK prodRef = prodRef PK dev_etat : 0 = validé 1 = en attente 2 = rejeté ,
Exercice Pour chacune des requêtes demandées, répondez d'abord à la question "pour chaque quoi/qui ?", en précisant à chaque fois l'identifiant rattaché. ,
Exercice devis - devNum - devDate - devEtat - nbrMO - cliNum produit - prodRef - prodDes - prodPU - prodUMesure client - cliNom - cliRue - cliCP - cliVille - cliTel contenu - quantité PK cliNum = cliNum FK FK devNum = devNum PK FK prodRef = prodRef PK dev_etat : 0 = validé 1 = en attente 2 = rejeté Le nombre d'heures de main d'œuvre total prévu pour chaque client sur l'ensemble des devis, ainsi que le nom des clients correspondant. ,
Exercice devis - devNum - devDate - devEtat - nbrMO - cliNum produit - prodRef - prodDes - prodPU - prodUMesure client - cliNom - cliRue - cliCP - cliVille - cliTel contenu - quantité PK cliNum = cliNum FK FK devNum = devNum PK FK prodRef = prodRef PK dev_etat : 0 = validé 1 = en attente 2 = rejeté Le nom des clients et le nombre de devis de ces clients, qui ne sont pas en état d'attente et qui ont été effectués depuis le 1er janvier de l'année courante, en triant les réponses par ordre alphabétique sur le nom des clients. ,
Exercice devis - devNum - devDate - devEtat - nbrMO - cliNum produit - prodRef - prodDes - prodPU - prodUMesure client - cliNom - cliRue - cliCP - cliVille - cliTel contenu - quantité PK cliNum = cliNum FK FK devNum = devNum PK FK prodRef = prodRef PK dev_etat : 0 = validé 1 = en attente 2 = rejeté Le nombre de fois que chaque produit a été intégré dans un devis accepté. Il faudra préciser à quel identifiant et quelle désignation de produit cela correspond. ,
Exercice devis - devNum - devDate - devEtat - nbrMO - cliNum produit - prodRef - prodDes - prodPU - prodUMesure client - cliNom - cliRue - cliCP - cliVille - cliTel contenu - quantité PK cliNum = cliNum FK FK devNum = devNum PK FK prodRef = prodRef PK dev_etat : 0 = validé 1 = en attente 2 = rejeté Le nombre de fois que l'article JR12 a été intégré dans un devis refusé. ,
Exercice devis - devNum - devDate - devEtat - nbrMO - cliNum produit - prodRef - prodDes - prodPU - prodUMesure client - cliNom - cliRue - cliCP - cliVille - cliTel contenu - quantité PK cliNum = cliNum FK FK devNum = devNum PK FK prodRef = prodRef PK dev_etat : 0 = validé 1 = en attente 2 = rejeté La liste des devis et le montant total de chacun pour le client de numéro 9052. .
Regroupements et agrégats La fonction de regroupement. Les agrégats sur regroupements. Les sélections sur agrégats. .
Regroupements et agrégats La fonction de regroupement. Les agrégats sur regroupements. Les sélections sur agrégats. .
Sélection sur agrégats Une sélection sur agrégat est comme une sélection sur un champ : elle sélectionne (limite) le nombre d'occurrences renvoyées par la requête. La première différence est qu'ici, elle se fait sur un agrégat, et non sur un champ. La seconde est qu'elle ne se fait pas dans le Where, mais dans le Having… ,
Sélection sur agrégats Syntaxe générale select <projection> from <table1> inner join <table2> on<champTable1> = <champTable2> [ where <sélection> ] group by <liste des champs de regroupement> having <sélection(s) sur agrégat > [ order by <champ> [ <optionTri> ] ] ,
Sélection sur agrégats L'agrégat de la sélection ne fait pas forcément partie de la projection. Il n'y a pas de having sans group by. L'agrégat peut être employé avec tous les opérateurs mathématiques utilisés pour les sélections sur champs. ,
Exercice devis - devNum - devDate - devEtat - nbrMO - cliNum produit - prodRef - prodDes - prodPU - prodUMesure client - cliNom - cliRue - cliCP - cliVille - cliTel contenu - quantité PK cliNum = cliNum FK FK devNum = devNum PK FK prodRef = prodRef PK dev_etat : 0 = validé 1 = en attente 2 = rejeté Le nom de tous les clients qui ont effectués au moins un devis accepté. ,
Exercice devis - devNum - devDate - devEtat - nbrMO - cliNum produit - prodRef - prodDes - prodPU - prodUMesure client - cliNom - cliRue - cliCP - cliVille - cliTel contenu - quantité PK cliNum = cliNum FK FK devNum = devNum PK FK prodRef = prodRef PK dev_etat : 0 = validé 1 = en attente 2 = rejeté La référence et la désignation de tous les produits qui ont été intégrés au moins dans deux devis. ,
Exercice devis - devNum - devDate - devEtat - nbrMO - cliNum produit - prodRef - prodDes - prodPU - prodUMesure client - cliNom - cliRue - cliCP - cliVille - cliTel contenu - quantité PK cliNum = cliNum FK FK devNum = devNum PK FK prodRef = prodRef PK dev_etat : 0 = validé 1 = en attente 2 = rejeté La référence et la désignation de tous les produits dont la quantité totale prévue dans l'ensemble des devis est supérieure à 10. ,
Exercice devis - devNum - devDate - devEtat - nbrMO - cliNum produit - prodRef - prodDes - prodPU - prodUMesure client - cliNom - cliRue - cliCP - cliVille - cliTel contenu - quantité PK cliNum = cliNum FK FK devNum = devNum PK FK prodRef = prodRef PK dev_etat : 0 = validé 1 = en attente 2 = rejeté Le nom de tous les clients qui ont eu besoin d'au moins 3 unités du produit JN5, en précisant le nombre de fois où ils ont eu besoin de ce produit et la quantité totale prévue. ..
Fin