Clausola Having
La scuola è molto grata per il tuo lavoro, e ora c'è un nuovo compito per noi.
Si scopre che alcuni studenti hanno sostenuto esami aggiuntivi quando avrebbero dovuto sostenere solo uno. La scuola li sospetta di imbrogliare perché ogni studente dovrebbe avere solo un voto.
Ci è stato assegnato il compito di ottenere i cognomi di questi studenti e passarli all'amministrazione scolastica affinché prendano le misure che ritengono necessarie.
Pensiamo insieme a come possiamo fare questo. Potresti iniziare considerando che possiamo farlo usando una clausola WHERE
, e potrebbe sembrare qualcosa del genere:
SELECT student_surname FROM student_grades WHERE COUNT(grade) > 1
Ma, come puoi vedere, otteniamo un errore che indica che non possiamo usare funzioni di aggregazione all'interno di una clausola WHERE
. È qui che avremo bisogno della clausola HAVING
.
Supponiamo di dover recuperare i dipartimenti in cui lo stipendio medio dei dipendenti è inferiore a $70,000 all'anno.
Per ottenere questo, dovremo usare una funzione di aggregazione e la clausola HAVING
:
SELECT department FROM employees GROUP BY department HAVING AVG(salary) < 70000
Abbiamo ricevuto un dipartimento in risposta utilizzando la clausola HAVING
, dove abbiamo impostato una condizione per la colonna con cui abbiamo raggruppato i dati.
Nota
Per utilizzare l'aggregazione dei dati all'interno della clausola
HAVING
, è necessario avere un raggruppamento dei dati nella nostra query. Come nella query sopra, abbiamo raggruppato i dati per la colonnadepartment
.
Esaminiamo la sintassi più generalizzata della clausola HAVING
e quando è meglio usarla:
sql
Cerchiamo anche di capire brevemente la differenza principale tra le clausole WHERE
e HAVING
e quando utilizzare ciascuna di esse:
La clausola
WHERE
viene utilizzata prima dell'aggregazione dei dati, mentre la clausolaHAVING
viene utilizzata dopo l'aggregazione dei dati;La clausola
WHERE
è scritta prima diGROUP BY
, mentre la clausolaHAVING
è scritta dopoGROUP BY
.
Queste sono le due principali differenze che devi ricordare per un uso efficace della clausola HAVING
. Ora, torniamo al compito assegnatoci dalla scuola.
Swipe to start coding
Il tuo compito sarà di recuperare i cognomi degli studenti che hanno più voti per la scuola.
Devi solo recuperare i cognomi degli studenti; non c'è bisogno di includere il conteggio dei loro voti nella risposta. Usa la clausola HAVING
e la funzione aggregata COUNT()
per portare a termine questo compito. Poi, ordina i cognomi in ordine alfabetico.
Nota:
Dovresti avere solo una colonna con i cognomi nel risultato.
Istruzioni Brevi
- Recupera la colonna
student_surname
. - Raggruppa i dati per
student_surname
. - Usa la clausola
HAVING
per filtrare i risultati basati suCOUNT(grade) > 1
. - Ordina i risultati per
student_surname
.
Soluzione
Grazie per i tuoi commenti!