7. Exemple de requêtes avec agrégation

DEA

Voici le DEA de la base de données des exemples.

DEAEtudiantProgramme

Téléchargez la base de données Cours7_EtudiantProgramme.sqlite sur LÉA.

Requêtes

  1. Quelle est la moyenne de chaque étudiant ? Affichez le nom et sa moyenne globale.
        
Copié
SELECT e.Nom, AVG(n.Note) AS MoyenneNoteFROM Etudiants eINNER JOIN Etudiants_Cours n ON e.DA = n.EtudiantsDAGROUP BY e.nom;
  1. Quelle est la moyenne pour le cours 420BD1 ? Affichez le nom du cours et la moyenne.
        
Copié
SELECT c.Nom, Avg(n.Note) AS MoyenneNoteFROM Cours cINNER JOIN Etudiants_Cours n ON c.Id = n.CoursIdWHERE c.Id = '420BD1'GROUP BY c.Nom;
  1. Quelle est la moyenne pour tous les cours ? Affichez le nom du cours et la moyenne. Si un cours n'a pas d'étudiants, il ne doit pas être listé.
        
Copié
SELECT c.Nom, Avg(n.Note) AS MoyenneNoteFROM Cours cINNER JOIN Etudiants_Cours n ON c.Id = n.CoursIdGROUP BY c.Nom;
  1. Quelle est la moyenne pour tous les cours ? Affichez le nom du cours et la moyenne. Si un cours n'a pas d'étudiants, il doit être listé.
        
Copié
SELECT c.Nom, Avg(n.Note) AS MoyenneNoteFROM Cours cLEFT OUTER JOIN Etudiants_Cours n ON c.Id = n.CoursIdGROUP BY c.Nom;
  1. Combien d'étudiants y a-t-il par cours ? Affichez le nom du cours et le nombre d'étudiants. Un cours sans étudiants doit afficher 0.
        
Copié
SELECT c.Nom, Count(DISTINCT n.EtudiantsDa) AS NbEtudiantFROM Cours cLEFT OUTER JOIN Etudiants_Cours n ON c.Id = n.CoursIdGROUP BY c.Nom;
  1. Quels sont les étudiants n'ayant pas reçu leur note dans un cours ? Affichez le nom de l'étudiant et le nom du cours. Je dois pouvoir différencier le nom de l'étudiant du nom du cours. Les étudiants inscrits à aucun cours n'ont pas besoin d'être listés.
        
Copié
SELECT e.Nom AS Etudiant, c.Nom AS CoursFROM Etudiants eINNER JOIN Etudiants_Cours ec ON e.DA = ec.EtudiantsDaINNER JOIN Cours c ON ec.CoursId = c.IdWHERE ec.Note IS NULL;
  1. Quelle est la moyenne de chaque étudiant par programme ? Affichez le nom du programme, le nom de l'étudiant et sa moyenne. Les programmes sans étudiants doivent être affichés.
        
Copié
SELECT p.Nom AS Programme, e.Nom AS Etudiant, Avg(n.Note) AS MoyenneNoteFROM Programmes pLEFT OUTER JOIN Etudiants e ON p.Id = e.ProgrammesIdLEFT OUTER JOIN Etudiants_Cours n ON e.DA = n.EtudiantsDaGROUP BY p.Nom, e.Nom;
  1. Quels sont les programmes ayant des étudiants ? Listez seulement le nom du programme, sans répétition.
        
Copié
SELECT DISTINCT p.NomFROM Programmes pLEFT OUTER JOIN Etudiants e ON p.Id = e.ProgrammesIdWHERE e.ProgrammesId IS NOT NULL;

ou

        
Copié
SELECT DISTINCT p.NomFROM Programmes pINNER JOIN Etudiants e ON p.Id = e.ProgrammesId;
  1. Quels sont les étudiants ayant une moyenne globale supérieure à 75 ? Affichez le nom de l'étudiant et sa moyenne.
        
Copié
SELECT e.Nom, Avg(n.Note) AS MoyenneNoteFROM Etudiants eINNER JOIN Etudiants_Cours n ON e.DA = n.EtudiantsDAGROUP BY e.nomHAVING Avg(n.Note) > 75;
  1. Quel est l'étudiant avec la plus haute moyenne ? Affichez le nom et sa moyenne.
        
Copié
SELECT e.Nom, Avg(n.Note) AS MoyenneNoteFROM Etudiants eLEFT OUTER JOIN Etudiants_Cours n ON e.DA = n.EtudiantsDAGROUP BY e.NomORDER BY Avg(n.note) DESCLIMIT 1;
  1. Combien d'étudiants y a-t-il par programme ? Un programme sans étudiants doit afficher 0. Affichez les programmes par ordre décroissant du nombre d'étudiants.
        
Copié
SELECT p.Nom, Count(e.Nom) AS NbEtudiantFROM Programmes p LEFT OUTER JOIN Etudiants e ON p.Id = e.ProgrammesIdGROUP BY p.NomORDER BY Count(e.Nom) DESC;
  1. Quels sont les programmes ayant plus de 3 étudiants ? Afficher le programme et le nombre d'étudiants.
        
Copié
SELECT p.Nom, Count(e.Nom) AS NbEtudiantFROM Programmes pINNER JOIN Etudiants e ON p.Id = e.ProgrammesIdGROUP BY p.NomHAVING Count(e.Nom) > 3;

N'hésitez pas si vous voulez plus d'exemple.


Version originale par François St-Hilaire

Produit à partir des notes de Benoit Desrosiers

Mise à jour 2023 par Pierre-Luc Boulanger