single
Clause Having
Glissez pour afficher le menu
Le système d'information scolaire est en cours de révision afin de garantir la cohérence et l'exactitude des données. Dans le cadre de cette révision, une nouvelle tâche d'analyse de données a été attribuée.
Lors des vérifications de routine, il a été découvert que certains dossiers d'élèves contiennent plus d'une note, alors que le système est conçu pour stocker une seule note par élève.
Votre tâche consiste à aider à identifier ces cas pour un examen interne approfondi.
Réfléchissez à comment vous pouvez procéder. Vous pourriez commencer par envisager d'utiliser une clause WHERE, ce qui ressemblerait à ceci :
123SELECT student_surname FROM student_grades WHERE COUNT(grade) > 1
Mais, comme vous pouvez le voir, un message d'erreur indique que vous ne pouvez pas utiliser de fonctions d'agrégation dans une clause WHERE. C'est ici que la clause HAVING devient nécessaire.
Supposons que vous deviez récupérer les départements où le salaire moyen des employés est inférieur à 70 000 $ par an.
Pour cela, il faudra utiliser une fonction d'agrégation et la clause HAVING :
1234SELECT department FROM employees GROUP BY department HAVING AVG(salary) < 70000
Le résultat est un seul département en réponse grâce à la clause HAVING, où une condition est définie pour la colonne utilisée pour le regroupement.
Pour utiliser l'agrégation de données dans la clause HAVING, il est nécessaire d'effectuer un regroupement des données dans la requête. Comme dans la requête ci-dessus, les données ont été regroupées par la colonne department.
Voici une syntaxe plus généralisée de la clause HAVING et les situations où il est préférable de l'utiliser :
SELECT column1, column2 --(optional)
FROM table
GROUP BY column1
HAVING AGG(column_n) --(condition)
-- This will cause an error
Voici un aperçu rapide de la principale différence entre les clauses WHERE et HAVING ainsi que le moment d'utiliser chacune d'elles :
- La clause
WHEREest utilisée avant l'agrégation des données, tandis que la clauseHAVINGest utilisée après l'agrégation des données ; - La clause
WHEREs'écrit avantGROUP BY, tandis que la clauseHAVINGs'écrit aprèsGROUP BY.
Ce sont les deux principales différences à retenir pour utiliser efficacement la clause HAVING. Revenons maintenant à la tâche donnée par l'école.
Glissez pour commencer à coder
Certains étudiants apparaissent plusieurs fois dans les relevés de notes, ce qui indique des entrées en double ou inattendues dans le système.
Vous devez extraire les noms de famille de tous les étudiants dont les relevés contiennent plus d'une note. Le résultat sera utilisé par l'administration scolaire pour examiner et corriger les données si nécessaire.
Retournez uniquement la liste des noms de famille répondant à cette condition, triée par ordre alphabétique.
Instructions brèves
- Extraction de la colonne
student_surname. - Regroupement des données par
student_surname. - Utilisation de la clause
HAVINGpour filtrer les résultats selonCOUNT(grade) > 1. - Tri des résultats par
student_surname.
Solution
Merci pour vos commentaires !
single
Demandez à l'IA
Demandez à l'IA
Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion