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

Scorri per mostrare il menu

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

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

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:

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

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

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:

  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 è scritta prima di GROUP BY, mentre la clausola HAVING è 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.

Compito

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 su COUNT(grade) > 1.
  • Ordina 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!

Sezione 1. Capitolo 6

Chieda ad AI

expand
ChatGPT

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

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

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

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:

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

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

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:

  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 è scritta prima di GROUP BY, mentre la clausola HAVING è 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.

Compito

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 su COUNT(grade) > 1.
  • Ordina 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!

Sezione 1. Capitolo 6
Switch to desktopCambia al desktop per esercitarti nel mondo realeContinua da dove ti trovi utilizzando una delle opzioni seguenti
Siamo spiacenti che qualcosa sia andato storto. Cosa è successo?
some-alt