Clausola Having
La scuola è molto grata per il tuo lavoro, e ora c'è un nuovo compito per noi.
Si è scoperto che alcuni studenti hanno sostenuto esami aggiuntivi quando avrebbero dovuto sostenerne solo uno. La scuola li sospetta di imbroglio perché ogni studente dovrebbe avere solo un voto.
Ci è stato chiesto di ottenere i cognomi di questi studenti e di passarli all'amministrazione scolastica affinché possa prendere le misure che ritiene opportune.
Riflettiamo insieme su come possiamo fare questo. Si potrebbe iniziare considerando che possiamo farlo usando una clausola WHERE
, e apparirebbe in questo modo:
123SELECT student_surname FROM student_grades WHERE COUNT(grade) > 1
Ma, come puoi vedere, otteniamo un errore che indica che non possiamo utilizzare funzioni di aggregazione all'interno di una clausola WHERE
. È qui che entra in gioco la clausola HAVING
.
Supponiamo di dover recuperare i dipartimenti in cui la media degli stipendi dei dipendenti è inferiore a $70.000 all'anno.
Per ottenere questo risultato, sarà necessario utilizzare una funzione di aggregazione e la clausola HAVING
:
1234SELECT department FROM employees GROUP BY department HAVING AVG(salary) < 70000
Abbiamo ottenuto un solo dipartimento in risposta utilizzando la clausola HAVING
, dove abbiamo impostato una condizione per la colonna in base alla quale abbiamo raggruppato i dati.
Nota
Per utilizzare l'aggregazione dei dati all'interno della clausola
HAVING
, è necessario che ci sia un raggruppamento dei dati nella query. Come nella query sopra, abbiamo raggruppato i dati per la colonnadepartment
.
Vediamo ora la sintassi più generalizzata della clausola HAVING
e quando è preferibile utilizzarla:
SELECT column1, column2... --(optional)
FROM table
GROUP BY column1
HAVING AGG(column_n) --(condition)
Comprendiamo anche 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
viene scritta prima diGROUP BY
, mentre la clausolaHAVING
viene 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.
Swipe to start coding
Il tuo compito sarà recuperare i cognomi degli studenti che hanno più voti per la scuola.
Devi solo recuperare i cognomi degli studenti; non è necessario includere il conteggio dei loro voti nella risposta. Utilizza la clausola HAVING
e la funzione aggregata COUNT()
per completare questo compito. Ordina poi i cognomi in ordine alfabetico.
Nota:
Il risultato deve avere solo una colonna con i cognomi.
Istruzioni sintetiche
- Recuperare la colonna
student_surname
. - Raggruppare i dati per
student_surname
. - Utilizzare la clausola
HAVING
per 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
Can you show me how to write the correct SQL query to find those students?
Can you explain why the HAVING clause works in this situation?
Can you give another example of using HAVING with a different aggregate function?
Awesome!
Completion rate improved to 4
Clausola Having
Scorri per mostrare il menu
La scuola è molto grata per il tuo lavoro, e ora c'è un nuovo compito per noi.
Si è scoperto che alcuni studenti hanno sostenuto esami aggiuntivi quando avrebbero dovuto sostenerne solo uno. La scuola li sospetta di imbroglio perché ogni studente dovrebbe avere solo un voto.
Ci è stato chiesto di ottenere i cognomi di questi studenti e di passarli all'amministrazione scolastica affinché possa prendere le misure che ritiene opportune.
Riflettiamo insieme su come possiamo fare questo. Si potrebbe iniziare considerando che possiamo farlo usando una clausola WHERE
, e apparirebbe in questo modo:
123SELECT student_surname FROM student_grades WHERE COUNT(grade) > 1
Ma, come puoi vedere, otteniamo un errore che indica che non possiamo utilizzare funzioni di aggregazione all'interno di una clausola WHERE
. È qui che entra in gioco la clausola HAVING
.
Supponiamo di dover recuperare i dipartimenti in cui la media degli stipendi dei dipendenti è inferiore a $70.000 all'anno.
Per ottenere questo risultato, sarà necessario utilizzare una funzione di aggregazione e la clausola HAVING
:
1234SELECT department FROM employees GROUP BY department HAVING AVG(salary) < 70000
Abbiamo ottenuto un solo dipartimento in risposta utilizzando la clausola HAVING
, dove abbiamo impostato una condizione per la colonna in base alla quale abbiamo raggruppato i dati.
Nota
Per utilizzare l'aggregazione dei dati all'interno della clausola
HAVING
, è necessario che ci sia un raggruppamento dei dati nella query. Come nella query sopra, abbiamo raggruppato i dati per la colonnadepartment
.
Vediamo ora la sintassi più generalizzata della clausola HAVING
e quando è preferibile utilizzarla:
SELECT column1, column2... --(optional)
FROM table
GROUP BY column1
HAVING AGG(column_n) --(condition)
Comprendiamo anche 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
viene scritta prima diGROUP BY
, mentre la clausolaHAVING
viene 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.
Swipe to start coding
Il tuo compito sarà recuperare i cognomi degli studenti che hanno più voti per la scuola.
Devi solo recuperare i cognomi degli studenti; non è necessario includere il conteggio dei loro voti nella risposta. Utilizza la clausola HAVING
e la funzione aggregata COUNT()
per completare questo compito. Ordina poi i cognomi in ordine alfabetico.
Nota:
Il risultato deve avere solo una colonna con i cognomi.
Istruzioni sintetiche
- Recuperare la colonna
student_surname
. - Raggruppare i dati per
student_surname
. - Utilizzare la clausola
HAVING
per filtrare i risultati in base aCOUNT(grade) > 1
. - Ordinare i risultati per
student_surname
.
Soluzione
Grazie per i tuoi commenti!
Awesome!
Completion rate improved to 4single