Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Clause Having | Regroupement
SQL Intermédiaire
Section 1. Chapitre 6
single

single

Clause Having

Glissez pour afficher le menu

Le système d'information scolaire est en cours de révision afin de garantir la cohérence et l'exactitude des données. Dans le cadre de cette révision, une nouvelle tâche d'analyse de données a été attribuée.

Lors des vérifications de routine, il a été découvert que certains dossiers d'élèves contiennent plus d'une note, alors que le système est conçu pour stocker une seule note par élève.

Votre tâche consiste à aider à identifier ces cas pour un examen interne approfondi.

Réfléchissez à comment vous pouvez procéder. Vous pourriez commencer par envisager d'utiliser une clause WHERE, ce qui ressemblerait à ceci :

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

Mais, comme vous pouvez le voir, un message d'erreur indique que vous ne pouvez pas utiliser de fonctions d'agrégation dans une clause WHERE. C'est ici que la clause HAVING devient nécessaire.

Supposons que vous deviez récupérer les départements où le salaire moyen des employés est inférieur à 70 000 $ par an. Pour cela, il faudra utiliser une fonction d'agrégation et la clause HAVING :

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

Le résultat est un seul département en réponse grâce à la clause HAVING, où une condition est définie pour la colonne utilisée pour le regroupement.

Note
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, les données ont été regroupées par la colonne department.

Voici une syntaxe plus généralisée 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)

-- This will cause an error

Voici un aperçu rapide de la principale différence entre les clauses WHERE et HAVING ainsi que le moment d'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 s'écrit avant GROUP BY, tandis que la clause HAVING s'écrit après GROUP BY.

Ce sont les deux principales différences à retenir pour utiliser efficacement la clause HAVING. Revenons maintenant à la tâche donnée par l'école.

Tâche

Glissez pour commencer à coder

Certains étudiants apparaissent plusieurs fois dans les relevés de notes, ce qui indique des entrées en double ou inattendues dans le système.

Vous devez extraire les noms de famille de tous les étudiants dont les relevés contiennent plus d'une note. Le résultat sera utilisé par l'administration scolaire pour examiner et corriger les données si nécessaire.

Retournez uniquement la liste des noms de famille répondant à cette condition, triée par ordre alphabétique.

Instructions brèves

  • Extraction de la colonne student_surname.
  • Regroupement des données par student_surname.
  • Utilisation de la clause HAVING pour filtrer les résultats selon COUNT(grade) > 1.
  • Tri des 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
single

single

Demandez à l'IA

expand

Demandez à l'IA

ChatGPT

Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion

some-alt