Fichier de rejeu Close

Indication Close

A propos de... Close

Commentaire Close

Systèmes d'Information

  • Notions mathématiques
  • Calcul relationnel
  • Algèbre relationnelle
  • Langage de requêtes
  • Arbre de requêtes
  • QCM
  • Introduction
  • Commandes de bases
  • Langage de définition de données
  • Types de données
  • Requêtes
  • Présentation
  • Calcul relationnel
  • Algèbre relationnelle
  • Division relationnelle
  • Dépendances fonctionnelles
  • Décomposition de relations
  • Inférence logique
  • Normalisation
  • Aux pays des bières
  • Modélisation
  • Exercices
  • Présentation
  • Aux pays des bières
  • Au Tournoi des six nations
  • Salles de concerts
  • Définitions
  • Langage SQL
  • Modèle relationnel
  • Films
  • Repas
  • Repas
Index

Téléchargements

  • Site
  • Sources
  • EniBook
logo

Crédits

© Your Copyright

Aide

En-tête

MenuContenu
Sommaire,
Téléchargements
Aide sur les outils

Pied de page

ChevronAction
Aller en haut de la page courante
Aller en bas de la page courante
Passer à la page précédente
Passer à la page suivante

Groupements

L’objectif de ces exercices est de savoir regrouper le informations et appliquer des fonctions d’agrégat sur ces regroupements « Aux pays des bières ».

4/4 GROUP BY, HAVING
  1. GROUP BY
    • Question
    • Solution

    Construire un arbre de requêtes répondant à la question :

    • \(Q_1\) : « Rechercher le nom, la couleur des bières et leur quantité en stock dans la base de données ».
    Votre réponse :
    Arbre de requêtes : graph45.json

    Tables

    Opérateurs unaires

    Opérateurs binaires

    Vue d'ensemble
    bierecouleursum(stock)
    BushBlonde1510
    GuinnessBrune250
    HeinekenBlonde50
    KanterbrauBlonde20
    KronenbourgBlonde1100
    KronenbourgBrune20
    NewcastleRousse10
    SpatenBlonde5010
    Une solution possible :

    On récupère d’abord les services de bieres :

    • \(NJ = \Join_{[]}(services, bieres)\).

    puis on fait un regroupement par nom et couleur des bières servies en appliquant la fonction d’aggrégat pour calculer la somme des stocks de bières (SUM(stock) sur les regroupements :

    • \(G = G_{[]}^{(biere,couleur,SUM(stock))}(NJ)\).

    Ecriture en algèbre relationnelle :

    • \(G = G_{[]}^{(biere,couleur,SUM(stock))}(\Join_{[]}(services, bieres))\).
    Arbre de requêtes : bars-16.json

    Tables

    Opérateurs unaires

    Opérateurs binaires

    Vue d'ensemble
    bierecouleursum(stock)
    BushBlonde1510
    GuinnessBrune250
    HeinekenBlonde50
    KanterbrauBlonde20
    KronenbourgBlonde1100
    KronenbourgBrune20
    NewcastleRousse10
    SpatenBlonde5010
  2. GROUP BY HAVING
    • Question
    • Solution

    Construire un arbre de requêtes répondant à la question :

    • \(Q_1\) : « Rechercher le nom des bars, le nombre de bières qu’ils servent et la somme de leur stocks pour les bars qui servent au moins deux bières ».
    Votre réponse :
    Arbre de requêtes : graph52.json

    Tables

    Opérateurs unaires

    Opérateurs binaires

    Vue d'ensemble
    id_barbarbar:1COUNT(id_biere)SUM(stock)
    1Bar du CoinBar du Coin81370
    2Corners PubCorners Pub21600
    Une solution possible :

    On récupère d’abord les services des bars :

    • \(NJ = \Join_{[]}(services, bars)\).

    puis on fait un regroupement par nom de bars en ne retenant dans les regroupements que les bars qui servent au moins 2 bières :

    • GROUP BY bar
    • HAVING COUNT(id_biere) > 1

    On applique sur ces regroupements les fonctions d’agrégat pour pouvoir compter le nombre de bières servies (COUNT(id_biere)) et calculer la somme des stocks (SUM(stock)) dans ces bars.

    Ecriture en algèbre relationnelle :

    • \(G = G_{[COUNT(id\_biere) > 1]}^{(bar,COUNT(id\_biere),SUM(stock))}(\Join_{[]}(services, bars))\).
    Arbre de requêtes : bars-17.json

    Tables

    Opérateurs unaires

    Opérateurs binaires

    Vue d'ensemble
    id_barbarbar:1COUNT(id_biere)SUM(stock)
    1Bar du CoinBar du Coin81370
    2Corners PubCorners Pub21600
  3. GROUP BY HAVING, requête imbriquée
    • Question
    • Solution

    Construire un arbre de requêtes répondant à la question :

    • \(Q_1\) : « Rechercher le nom des pays, le nombre de toutes les bières servies dans ces pays et la somme de leurs stocks, pour les pays dont la quantité de bières est supérieure à la moyenne des stocks mondiaux ».
    Votre réponse :
    Arbre de requêtes : graph59.json

    Tables

    Opérateurs unaires

    Opérateurs binaires

    Vue d'ensemble
    Une solution possible :

    On récupère d’abord les services des bars :

    • \(NJ = \Join_{[]}(services, bars)\).

    puis on fait un regroupement par nom de bars en ne retenant dans les regroupements que les bars dont la quantité de bières est supérieure à la moyenne des stocks mondiaux. Il faut donc faire une requête imbriquée dans la clause HAVING pour calculer la moyenne des stocks de bières servies et vérifier qu’elle est supérieure à la somme des stocks de chaque bar regroupé :

    • GROUP BY bar
    • HAVING SUM(stock)  > SELECT AVG(stock) FROM  services)

    On obtient dans le résultat final le nom des pays, le nombre de bières et la somme des SUM(stock) servies dans ces pays.

    Ecriture en algèbre relationnelle :

    • \(NJ = \Join_{[]}(services, bars)\).
    • \(G = G_{[SUM(stock) \; > \; (SELECT \; AVG(stock) \; FROM \; services)]}^{(pays,COUNT(id\_biere),SUM(stock))}(NJ)\).
    Arbre de requêtes : bars-18.json

    Tables

    Opérateurs unaires

    Opérateurs binaires

    Vue d'ensemble
  4. WHERE, GROUP BY HAVING
    • Question
    • Solution

    Construire un arbre de requêtes répondant à la question :

    • \(Q_1\) : « Rechercher le nom des bars, le nombre de toutes les bières servies dans ces bars et la somme de leurs stocks, pour les bars de “France” ou des “USA” servant plus d’une bière ».
    Votre réponse :
    Arbre de requêtes : graph64.json

    Tables

    Opérateurs unaires

    Opérateurs binaires

    Vue d'ensemble
    barCOUNT(id_biere)SUM(stock)
    Bar du Coin81370
    Corners Pub21600
    Une solution possible :

    On vérifie d’abord que les bars sont bien en 'France' ou aux 'USA' :

    • \(R = \sigma{[pays ='France' \; OR \; pays='USA']}(bars)\)

    On récupère ensuite les services de bars de ces deux pays

    • \(NJ = \Join{[]}(services,R)\)

    Puis on fait un regroupement (GROUP BY) par nom (bar) de bars.

    On ne retient dans ce regroupement que les bars dont le nombre de bières est supérieur à la moyenne des stocks mondiaux.

    On récupère dans le résultat final le nom des bars (l’attribut de groupement bar), le nombre (COUNT(id_biere))) de bières qu’ils servent et la somme (SUM(stock)) des stock de bières servies dans ces bars.

    • \(G = G_{[SUM(stock)> (SELECT COUNT (id_biere) > 1)]}^{(bar,COUNT(id\_biere),SUM(stock))}(NJ)\).
    Arbre de requêtes : bars-19.json

    Tables

    Opérateurs unaires

    Opérateurs binaires

    Vue d'ensemble
    barCOUNT(id_biere)SUM(stock)
    Bar du Coin81370
    Corners Pub21600
 
Systèmes d'Information : Groupements, 12 févr. 2018.