Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Clausola Having | Raggruppamento
SQL Intermedio

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

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

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:

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

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 colonna department.

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:

  1. La clausola WHERE viene utilizzata prima dell'aggregazione dei dati, mentre la clausola HAVING viene utilizzata dopo l'aggregazione dei dati;
  2. La clausola WHERE viene scritta prima di GROUP BY, mentre la clausola HAVING viene scritta dopo GROUP BY.

Queste sono le due principali differenze da ricordare per un uso corretto della clausola HAVING. Ora torniamo al compito assegnato dalla scuola.

Compito

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 a COUNT(grade) > 1.
  • Ordinare i risultati per student_surname.

Soluzione

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 1. Capitolo 6
single

single

Chieda ad AI

expand

Chieda ad AI

ChatGPT

Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione

Suggested prompts:

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?

close

Awesome!

Completion rate improved to 4

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

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

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:

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

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 colonna department.

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:

  1. La clausola WHERE viene utilizzata prima dell'aggregazione dei dati, mentre la clausola HAVING viene utilizzata dopo l'aggregazione dei dati;
  2. La clausola WHERE viene scritta prima di GROUP BY, mentre la clausola HAVING viene scritta dopo GROUP BY.

Queste sono le due principali differenze da ricordare per un uso corretto della clausola HAVING. Ora torniamo al compito assegnato dalla scuola.

Compito

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 a COUNT(grade) > 1.
  • Ordinare i risultati per student_surname.

Soluzione

Switch to desktopCambia al desktop per esercitarti nel mondo realeContinua da dove ti trovi utilizzando una delle opzioni seguenti
Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

close

Awesome!

Completion rate improved to 4
Sezione 1. Capitolo 6
single

single

some-alt