Clause Having
L’école vous est très reconnaissante 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 nous pouvons procéder. Vous pourriez commencer par envisager que cela peut se faire avec 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 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 regroupé les données.
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 regroupé les données par la colonne department.
Examinons la syntaxe plus générale de la clause HAVING ainsi que 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)
Compréhension succincte de la différence principale entre les clauses WHERE et HAVING ainsi que leur utilisation respective :
- La clause
WHEREs’utilise avant l’agrégation des données, tandis que la clauseHAVINGs’utilise 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 différences principales à retenir pour une utilisation efficace de la clause HAVING. Reprenons maintenant l’exercice proposé par l’école.
Swipe to start coding
Vous devez uniquement récupérer 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.
Le résultat doit comporter une seule colonne avec les noms de famille.
Instructions brèves
- Récupérer 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 est très reconnaissante 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 nous pouvons procéder. Vous pourriez commencer par envisager que cela peut se faire avec 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 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 regroupé les données.
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 regroupé les données par la colonne department.
Examinons la syntaxe plus générale de la clause HAVING ainsi que 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)
Compréhension succincte de la différence principale entre les clauses WHERE et HAVING ainsi que leur utilisation respective :
- La clause
WHEREs’utilise avant l’agrégation des données, tandis que la clauseHAVINGs’utilise 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 différences principales à retenir pour une utilisation efficace de la clause HAVING. Reprenons maintenant l’exercice proposé par l’école.
Swipe to start coding
Vous devez uniquement récupérer 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.
Le résultat doit comporter une seule colonne avec les noms de famille.
Instructions brèves
- Récupérer 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