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

bookClausola Having

Il sistema informativo scolastico è in fase di revisione per garantire la coerenza e l'accuratezza dei dati. Come parte di questa revisione, è stato assegnato un nuovo compito di analisi dei dati.

Durante i controlli di routine, è stato scoperto che alcuni record degli studenti contengono più di una voce di voto, anche se il sistema è progettato per memorizzare un solo voto per studente.

Il tuo compito è aiutare a identificare tali casi per ulteriori verifiche interne.

Riflettiamo insieme su come possiamo fare questo. Potresti iniziare considerando che possiamo farlo utilizzando una clausola WHERE, e potrebbe apparire in questo modo:

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

Ma, come puoi vedere, viene restituito un errore che indica che non è possibile utilizzare funzioni di aggregazione all'interno di una clausola WHERE. In questo caso, è necessario utilizzare la clausola HAVING.

Supponiamo di dover recuperare i reparti in cui lo stipendio medio dei dipendenti è inferiore a $70.000 all'anno. Per ottenere questo risultato, è 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.

Note
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 la sintassi più generalizzata della clausola HAVING e quando è più opportuno utilizzarla:

SELECT column1, column2 --(optional)
FROM table
GROUP BY column1
HAVING AGG(column_n) --(condition)

Comprendere brevemente anche 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 differenze principali da ricordare per un utilizzo corretto della clausola HAVING. Ora, torniamo all'esercizio proposto dalla scuola.

Compito

Swipe to start coding

Alcuni studenti compaiono più volte nei registri dei voti, il che indica la presenza di voci duplicate o inattese nel sistema.

È necessario recuperare i cognomi di tutti gli studenti i cui registri contengono più di una voce di voto. Il risultato sarà utilizzato dall'amministrazione scolastica per esaminare e correggere i dati se necessario.

Restituire solo l'elenco dei cognomi che soddisfano questa condizione, ordinati alfabeticamente.

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 use the HAVING clause to find students with multiple grade entries?

Can you explain why the HAVING clause works in this scenario but WHERE does not?

Can you provide an example query for the school task using HAVING?

close

bookClausola Having

Scorri per mostrare il menu

Il sistema informativo scolastico è in fase di revisione per garantire la coerenza e l'accuratezza dei dati. Come parte di questa revisione, è stato assegnato un nuovo compito di analisi dei dati.

Durante i controlli di routine, è stato scoperto che alcuni record degli studenti contengono più di una voce di voto, anche se il sistema è progettato per memorizzare un solo voto per studente.

Il tuo compito è aiutare a identificare tali casi per ulteriori verifiche interne.

Riflettiamo insieme su come possiamo fare questo. Potresti iniziare considerando che possiamo farlo utilizzando una clausola WHERE, e potrebbe apparire in questo modo:

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

Ma, come puoi vedere, viene restituito un errore che indica che non è possibile utilizzare funzioni di aggregazione all'interno di una clausola WHERE. In questo caso, è necessario utilizzare la clausola HAVING.

Supponiamo di dover recuperare i reparti in cui lo stipendio medio dei dipendenti è inferiore a $70.000 all'anno. Per ottenere questo risultato, è 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.

Note
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 la sintassi più generalizzata della clausola HAVING e quando è più opportuno utilizzarla:

SELECT column1, column2 --(optional)
FROM table
GROUP BY column1
HAVING AGG(column_n) --(condition)

Comprendere brevemente anche 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 differenze principali da ricordare per un utilizzo corretto della clausola HAVING. Ora, torniamo all'esercizio proposto dalla scuola.

Compito

Swipe to start coding

Alcuni studenti compaiono più volte nei registri dei voti, il che indica la presenza di voci duplicate o inattese nel sistema.

È necessario recuperare i cognomi di tutti gli studenti i cui registri contengono più di una voce di voto. Il risultato sarà utilizzato dall'amministrazione scolastica per esaminare e correggere i dati se necessario.

Restituire solo l'elenco dei cognomi che soddisfano questa condizione, ordinati alfabeticamente.

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!

Sezione 1. Capitolo 6
single

single

some-alt