Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Clause HAVING | Grouping
SQL Intermédiaire
course content

Contenu du cours

SQL Intermédiaire

SQL Intermédiaire

1. Grouping
2. Sous-Requêtes Imbriquées
3. Joindre des Tables
4. DDL et DML en SQL

book
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 :

123
SELECT student_surname FROM student_grades WHERE COUNT(grade) > 1
copy

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:

1234
SELECT department FROM employees GROUP BY department HAVING AVG(salary) < 70000
copy

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 colonne department.

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 :

  1. La clause WHERE est utilisée avant l'agrégation des données, tandis que la clause HAVING est utilisée après l'agrégation des données ;
  2. La clause WHERE se place avant le GROUP BY, tandis que la clause HAVING se place après le GROUP 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.

Tâche

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 de COUNT(grade) > 1.
  • Triez les résultats par student_surname.

Solution

Switch to desktopPassez à un bureau pour une pratique réelleContinuez d'où vous êtes en utilisant l'une des options ci-dessous
Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 1. Chapitre 6
toggle bottom row

book
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 :

123
SELECT student_surname FROM student_grades WHERE COUNT(grade) > 1
copy

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:

1234
SELECT department FROM employees GROUP BY department HAVING AVG(salary) < 70000
copy

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 colonne department.

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 :

  1. La clause WHERE est utilisée avant l'agrégation des données, tandis que la clause HAVING est utilisée après l'agrégation des données ;
  2. La clause WHERE se place avant le GROUP BY, tandis que la clause HAVING se place après le GROUP 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.

Tâche

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 de COUNT(grade) > 1.
  • Triez les résultats par student_surname.

Solution

Switch to desktopPassez à un bureau pour une pratique réelleContinuez d'où vous êtes en utilisant l'une des options ci-dessous
Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 1. Chapitre 6
Switch to desktopPassez à un bureau pour une pratique réelleContinuez d'où vous êtes en utilisant l'une des options ci-dessous
We're sorry to hear that something went wrong. What happened?
some-alt