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