Bases des bases de données

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 ?

  1. A6, 6, 40
  2. B6, 4, 40
  3. C6, 4, 60
Afficher la réponse et l'explication

Réponse : C. 6, 4, 60

COUNT(*) compte les lignes, qu'elles contiennent NULL ou non ; il vaut donc 6. Avec une colonne spécifiée, comme dans COUNT(Points), seules les lignes où cette colonne n'est pas NULL sont comptées ; il vaut donc 4. AVG(Points) divise la somme des 4 valeurs non NULL, 50 + 70 + 90 + 30 = 240, par le nombre de valeurs non NULL, 4, ce qui donne 240 ÷ 4 = 60. Attention, cela diffère de la division de la somme par le nombre total de lignes, SUM(Points) / COUNT(*) = 240 ÷ 6 = 40. Pour traiter NULL comme 0 point, on le remplace avec COALESCE(Points, 0) avant l'agrégation.

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

Autres questions sur Bases des bases de données

  1. À 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 ?
  2. 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 ?
  3. 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 ?
  4. 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 ?
  5. Une table Employe(NumEmploye, Nom, IdService) contient 5 lignes dont les valeurs IdService sont, dans l'ordre, 10, 20, 10, NULL et NULL. Une table Service(IdService, NomService) contient 3 lignes dont IdService vaut 10, 20 et 30. Combien de lignes renvoie SELECT Service.NomService, Employe.Nom FROM Service LEFT OUTER JOIN Employe ON Service.IdService = Employe.IdService ?