Contenu du cours
SQL Intermédiaire
SQL Intermédiaire
Clause HAVING
L'école est très reconnaissante pour votre travail, et maintenant une nouvelle tâche nous est confiée.
Il se trouve que certains étudiants ont passé des examens supplémentaires alors qu'ils étaient censés n'en passer qu'un seul. L'école les soupçonne de tricherie car chaque étudiant ne devrait avoir qu'une seule note.
Nous avons pour mission de récupérer les noms de famille de ces étudiants et de les transmettre à l'administration de l'école pour qu'elle prenne les mesures qu'elle juge nécessaires.
Réfléchissons ensemble à la manière de procéder. Vous pourriez commencer par considérer que nous pouvons le faire en utilisant une clause WHERE
, et cela ressemblerait à quelque chose comme suit :
SELECT 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 à l'intérieur d'une clause WHERE
. C'est ici que nous aurons besoin de la clause HAVING
.
Disons que nous devons récupérer les départements où le salaire moyen des employés est inférieur à 70 000 $ par an.
Pour ce faire, nous devrons utiliser une fonction d'agrégation et la clause HAVING
:
SELECT department FROM employees GROUP BY department HAVING AVG(salary) < 70000
Nous avons obtenu un département en réponse en utilisant la clause HAVING
, où nous avons défini une condition pour la colonne par laquelle nous avons regroupé les données.
Remarque
Pour utiliser l'agrégation de données dans la clause
HAVING
, nous devons avoir un regroupement de données dans notre requête. Comme dans la requête ci-dessus, nous avons regroupé les données par la colonnedepartment
.
Examinons la syntaxe plus générale de la clause HAVING
et quand il est préférable de l'utiliser:
Comprenons également brièvement la principale différence entre les clauses WHERE
et HAVING
et quand 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
se place avant leGROUP BY
, tandis que la clauseHAVING
se place après leGROUP BY
.
Ce sont les deux principales différences que vous devez retenir pour une utilisation réussie de la clause HAVING
. Revenons maintenant à la tâche qui nous a été confiée par l'école.
Swipe to start coding
Votre tâche consistera à récupérer les noms de famille des étudiants qui ont plusieurs notes pour l'école.
Vous avez seulement besoin de 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.
Remarque:
Vous ne devriez avoir qu'une seule colonne contenant les noms de famille dans le résultat.
Brèves Instructions
- Récupérez la colonne
student_surname
. - Regroupez les données par
student_surname
. - Utilisez la clause
HAVING
pour filtrer les résultats en fonction deCOUNT(grade) > 1
. - Triez les résultats par
student_surname
.
Solution
Merci pour vos commentaires !
Clause HAVING
L'école est très reconnaissante pour votre travail, et maintenant une nouvelle tâche nous est confiée.
Il se trouve que certains étudiants ont passé des examens supplémentaires alors qu'ils étaient censés n'en passer qu'un seul. L'école les soupçonne de tricherie car chaque étudiant ne devrait avoir qu'une seule note.
Nous avons pour mission de récupérer les noms de famille de ces étudiants et de les transmettre à l'administration de l'école pour qu'elle prenne les mesures qu'elle juge nécessaires.
Réfléchissons ensemble à la manière de procéder. Vous pourriez commencer par considérer que nous pouvons le faire en utilisant une clause WHERE
, et cela ressemblerait à quelque chose comme suit :
SELECT 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 à l'intérieur d'une clause WHERE
. C'est ici que nous aurons besoin de la clause HAVING
.
Disons que nous devons récupérer les départements où le salaire moyen des employés est inférieur à 70 000 $ par an.
Pour ce faire, nous devrons utiliser une fonction d'agrégation et la clause HAVING
:
SELECT department FROM employees GROUP BY department HAVING AVG(salary) < 70000
Nous avons obtenu un département en réponse en utilisant la clause HAVING
, où nous avons défini une condition pour la colonne par laquelle nous avons regroupé les données.
Remarque
Pour utiliser l'agrégation de données dans la clause
HAVING
, nous devons avoir un regroupement de données dans notre requête. Comme dans la requête ci-dessus, nous avons regroupé les données par la colonnedepartment
.
Examinons la syntaxe plus générale de la clause HAVING
et quand il est préférable de l'utiliser:
Comprenons également brièvement la principale différence entre les clauses WHERE
et HAVING
et quand 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
se place avant leGROUP BY
, tandis que la clauseHAVING
se place après leGROUP BY
.
Ce sont les deux principales différences que vous devez retenir pour une utilisation réussie de la clause HAVING
. Revenons maintenant à la tâche qui nous a été confiée par l'école.
Swipe to start coding
Votre tâche consistera à récupérer les noms de famille des étudiants qui ont plusieurs notes pour l'école.
Vous avez seulement besoin de 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.
Remarque:
Vous ne devriez avoir qu'une seule colonne contenant les noms de famille dans le résultat.
Brèves Instructions
- Récupérez la colonne
student_surname
. - Regroupez les données par
student_surname
. - Utilisez la clause
HAVING
pour filtrer les résultats en fonction deCOUNT(grade) > 1
. - Triez les résultats par
student_surname
.
Solution
Merci pour vos commentaires !