Bases des bases de données

La colonne Points d'une table Examen contient 4 valeurs : 80, NULL, 70, 90 (NULL signifie que la personne n'a pas passé l'examen). Quel est le résultat de SELECT AVG(Points) FROM Examen ?

  1. A60
  2. B80
  3. CNULL
Afficher la réponse et l'explication

Réponse : B. 80

Les fonctions d'agrégation de SQL (SUM, AVG, MAX, MIN, et COUNT avec une colonne spécifiée) ignorent NULL. AVG(Points) est la moyenne des 3 valeurs non NULL : (80 + 70 + 90) ÷ 3 = 240 ÷ 3 = 80. Considérer NULL comme 0 et diviser par 4 donnerait 240 ÷ 4 = 60, mais AVG ne calcule pas ainsi. Pour faire la moyenne en comptant les absents comme 0 point, on remplace NULL par 0 avant l'agrégation, comme dans AVG(COALESCE(Points, 0)). Si toutes les valeurs sont NULL, le résultat d'AVG est NULL.

S'entraîner sur ce thème Retour au thème

Autres questions sur Bases des bases de données

  1. La colonne Points d'une table Resultat contient 6 valeurs : 50, NULL, 70, NULL, 90, 30. Quelle proposition donne, dans l'ordre, le résultat de SELECT COUNT(*), COUNT(Points), AVG(Points) FROM Resultat ?
  2. À partir d'une table Employe(NumEmploye, Service, Salaire), on veut obtenir les services dont le salaire moyen est supérieur ou égal à 300, ainsi que ce salaire moyen. Quelle instruction SQL est correcte ?
  3. Une table Vente(Magasin, Montant) contient 7 lignes : (A, 500), (A, 700), (B, 300), (B, 400), (C, 1200), (D, 200), (D, 900). Combien de lignes renvoie SELECT Magasin, SUM(Montant) FROM Vente GROUP BY Magasin HAVING SUM(Montant) >= 1000 ?
  4. Une table Employe(Nom, Service, Salaire) contient 8 lignes ; les salaires par service sont : Commercial 320, 280, 350 ; Développement 400, 310 ; Administration 260, 300 ; Planification 330. Combien de lignes renvoie SELECT Service, COUNT(*) FROM Employe WHERE Salaire >= 300 GROUP BY Service HAVING COUNT(*) >= 2 ?
  5. Une table Employe(NumEmploye, Nom, IdService) contient 4 lignes dont les valeurs IdService sont, dans l'ordre, 10, 20, 10 et NULL. Une table Service(IdService, NomService) contient 3 lignes dont IdService vaut 10, 20 et 30. Combien de lignes renvoie SELECT Employe.Nom, Service.NomService FROM Employe INNER JOIN Service ON Employe.IdService = Service.IdService ?