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 n’auraient dû 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 appropriées.
Réfléchissons ensemble à comment procéder. On pourrait commencer par envisager l’utilisation d’une clause WHERE
, ce qui donnerait quelque chose comme 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 ainsi que 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
WHERE
est utilisée avant l’agrégation des données, tandis que la clauseHAVING
est utilisée après l’agrégation des données ; - La clause
WHERE
s’écrit avantGROUP BY
, tandis que la clauseHAVING
s’écrit aprèsGROUP BY
.
Ce sont les deux principales différences à retenir pour utiliser efficacement la clause HAVING
. Revenons maintenant à la tâche qui nous a été confié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
HAVING
pour 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
Awesome!
Completion rate improved to 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 n’auraient dû 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 appropriées.
Réfléchissons ensemble à comment procéder. On pourrait commencer par envisager l’utilisation d’une clause WHERE
, ce qui donnerait quelque chose comme 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 ainsi que 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
WHERE
est utilisée avant l’agrégation des données, tandis que la clauseHAVING
est utilisée après l’agrégation des données ; - La clause
WHERE
s’écrit avantGROUP BY
, tandis que la clauseHAVING
s’écrit aprèsGROUP BY
.
Ce sont les deux principales différences à retenir pour utiliser efficacement la clause HAVING
. Revenons maintenant à la tâche qui nous a été confié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
HAVING
pour filtrer les résultats selonCOUNT(grade) > 1
. - Trier les résultats par
student_surname
.
Solution
Merci pour vos commentaires !
Awesome!
Completion rate improved to 4single