Clause Having
L’école vous remercie vivement pour votre travail, et une nouvelle tâche nous attend.
Il s’avère que certains élèves ont passé des examens supplémentaires alors qu’ils ne devaient en passer qu’un seul. L’école les soupçonne de tricherie car chaque élève ne devrait avoir qu’une seule note.
Notre mission est d’obtenir les noms de famille de ces élèves et de les transmettre à l’administration scolaire afin qu’elle prenne les mesures qu’elle jugera nécessaires.
Réfléchissons ensemble à comment procéder. Vous pourriez commencer par envisager que cela peut être fait à l’aide d’une clause WHERE, ce qui ressemblerait à ceci :
123SELECT student_surname FROM student_grades WHERE COUNT(grade) > 1
Mais, comme vous pouvez le constater, nous obtenons une erreur indiquant que nous ne pouvons pas utiliser de fonctions d'agrégation dans une clause WHERE. C'est ici que la clause HAVING devient nécessaire.
Supposons que nous devions récupérer les départements où le salaire moyen des employés est inférieur à 70 000 $ par an.
Pour cela, il est nécessaire d'utiliser une fonction d'agrégation et la clause HAVING :
1234SELECT department FROM employees GROUP BY department HAVING AVG(salary) < 70000
Nous avons obtenu un seul département en réponse grâce à la clause HAVING, où nous avons défini une condition pour la colonne selon laquelle nous avons groupé les données.
Remarque
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, nous avons groupé les données par la colonnedepartment.
Examinons la syntaxe plus générale 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)
Comprenons également brièvement la différence principale 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.
Voici les deux différences principales à retenir pour utiliser efficacement la clause HAVING. Revenons maintenant à la tâche donnée par l’école.
Swipe to start coding
Votre tâche consiste à récupérer les noms de famille des étudiants qui possèdent plusieurs notes pour l'école.
Vous devez uniquement extraire les noms de famille des étudiants ; il n'est pas nécessaire d'inclure le nombre de leurs notes dans la réponse. Utilisez la clause HAVING et la fonction d'agrégation COUNT() pour accomplir cette tâche. Ensuite, triez les noms de famille par ordre alphabétique.
Remarque :
Le résultat doit comporter une seule colonne avec les noms de famille.
Instructions brèves
- Extraire la colonne
student_surname. - Regrouper les données par
student_surname. - Utiliser la clause
HAVINGpour filtrer les résultats selonCOUNT(grade) > 1. - Trier les 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
Génial!
Completion taux amélioré à 4
Clause Having
Glissez pour afficher le menu
L’école vous remercie vivement pour votre travail, et une nouvelle tâche nous attend.
Il s’avère que certains élèves ont passé des examens supplémentaires alors qu’ils ne devaient en passer qu’un seul. L’école les soupçonne de tricherie car chaque élève ne devrait avoir qu’une seule note.
Notre mission est d’obtenir les noms de famille de ces élèves et de les transmettre à l’administration scolaire afin qu’elle prenne les mesures qu’elle jugera nécessaires.
Réfléchissons ensemble à comment procéder. Vous pourriez commencer par envisager que cela peut être fait à l’aide d’une clause WHERE, ce qui ressemblerait à ceci :
123SELECT student_surname FROM student_grades WHERE COUNT(grade) > 1
Mais, comme vous pouvez le constater, nous obtenons une erreur indiquant que nous ne pouvons pas utiliser de fonctions d'agrégation dans une clause WHERE. C'est ici que la clause HAVING devient nécessaire.
Supposons que nous devions récupérer les départements où le salaire moyen des employés est inférieur à 70 000 $ par an.
Pour cela, il est nécessaire d'utiliser une fonction d'agrégation et la clause HAVING :
1234SELECT department FROM employees GROUP BY department HAVING AVG(salary) < 70000
Nous avons obtenu un seul département en réponse grâce à la clause HAVING, où nous avons défini une condition pour la colonne selon laquelle nous avons groupé les données.
Remarque
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, nous avons groupé les données par la colonnedepartment.
Examinons la syntaxe plus générale 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)
Comprenons également brièvement la différence principale 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.
Voici les deux différences principales à retenir pour utiliser efficacement la clause HAVING. Revenons maintenant à la tâche donnée par l’école.
Swipe to start coding
Votre tâche consiste à récupérer les noms de famille des étudiants qui possèdent plusieurs notes pour l'école.
Vous devez uniquement extraire les noms de famille des étudiants ; il n'est pas nécessaire d'inclure le nombre de leurs notes dans la réponse. Utilisez la clause HAVING et la fonction d'agrégation COUNT() pour accomplir cette tâche. Ensuite, triez les noms de famille par ordre alphabétique.
Remarque :
Le résultat doit comporter une seule colonne avec les noms de famille.
Instructions brèves
- Extraire la colonne
student_surname. - Regrouper les données par
student_surname. - Utiliser la clause
HAVINGpour filtrer les résultats selonCOUNT(grade) > 1. - Trier les résultats par
student_surname.
Solution
Merci pour vos commentaires !
single