single
Clausola Having
Scorri per mostrare il menu
Il sistema informativo scolastico è in fase di revisione per garantire la coerenza e l'accuratezza dei dati. Come parte di questa revisione, è stato assegnato un nuovo compito di analisi dei dati.
Durante i controlli di routine, è stato scoperto che alcuni record degli studenti contengono più di una voce di voto, anche se il sistema è progettato per memorizzare un solo voto per studente.
Il tuo compito è aiutare a identificare tali casi per ulteriori verifiche interne.
Pensa a come puoi fare questo. Potresti iniziare considerando che puoi farlo utilizzando una clausola WHERE, e apparirebbe in questo modo:
123SELECT student_surname FROM student_grades WHERE COUNT(grade) > 1
Ma, come puoi vedere, viene restituito un errore che indica che non è possibile utilizzare funzioni di aggregazione all'interno di una clausola WHERE. In questi casi è necessario utilizzare la clausola HAVING.
Supponiamo sia necessario recuperare i reparti in cui lo stipendio medio dei dipendenti è inferiore a $70.000 all'anno.
Per ottenere questo risultato, occorre utilizzare una funzione di aggregazione e la clausola HAVING:
1234SELECT department FROM employees GROUP BY department HAVING AVG(salary) < 70000
Il risultato è un solo dipartimento in risposta utilizzando la clausola HAVING, dove viene impostata una condizione per la colonna utilizzata per il raggruppamento.
Per utilizzare l'aggregazione dei dati all'interno della clausola HAVING, è necessario avere un raggruppamento dei dati nella query. Come nella query sopra, abbiamo raggruppato i dati per la colonna department.
Di seguito è riportata la sintassi più generalizzata della clausola HAVING e quando è meglio utilizzarla:
SELECT column1, column2 --(optional)
FROM table
GROUP BY column1
HAVING AGG(column_n) --(condition)
-- This will cause an error
Ecco una breve panoramica della differenza principale tra le clausole WHERE e HAVING e quando utilizzare ciascuna di esse:
- La clausola
WHEREviene utilizzata prima dell'aggregazione dei dati, mentre la clausolaHAVINGviene utilizzata dopo l'aggregazione dei dati; - La clausola
WHEREviene scritta prima diGROUP BY, mentre la clausolaHAVINGviene scritta dopoGROUP BY.
Queste sono le due principali differenze da ricordare per un uso corretto della clausola HAVING. Ora, torniamo al compito assegnato dalla scuola.
Scorri per iniziare a programmare
Alcuni studenti compaiono più volte nei registri dei voti, il che indica la presenza di voci duplicate o inattese nel sistema.
È necessario recuperare i cognomi di tutti gli studenti i cui registri contengono più di una voce relativa ai voti. Il risultato sarà utilizzato dall'amministrazione scolastica per esaminare e correggere i dati, se necessario.
Restituire solo l'elenco dei cognomi che soddisfano questa condizione, ordinati alfabeticamente.
Istruzioni sintetiche
- Recuperare la colonna
student_surname. - Raggruppare i dati per
student_surname. - Utilizzare la clausola
HAVINGper filtrare i risultati in base aCOUNT(grade) > 1. - Ordinare i risultati per
student_surname.
Soluzione
Grazie per i tuoi commenti!
single
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione