Torna all'elenco degli articoli Articoli
Tempo di lettura: 8 minuti

Le 9 migliori domande di SQL GROUP BY

Vi state preparando per un colloquio di lavoro SQL? Questa guida vi guiderà attraverso nove domande di GROUP BY di base, intermedie e avanzate alle quali potreste dover rispondere.

Ci sono domande comuni a GROUP BY che compaiono in molti colloqui di lavoro in SQL; in questo articolo vi spiegheremo come rispondere. Se siete un analista di dati o un altro professionista dei dati che si sta preparando per un colloquio, questo articolo ha lo scopo di aiutarvi. Naturalmente, anche chiunque sia interessato all'SQL e alla clausola GROUP BY può leggere queste domande. Probabilmente imparerete qualcosa di nuovo e interessante su questa famosa clausola.

Questo articolo è diviso in due sezioni: domande di base e domande intermedie/avanzate. Questo approccio graduale riflette anche i nostri corsi che trattano la clausola GROUP BY, incluso il corsoSQL per principianti . In 129 esercizi interattivi, vengono introdotti importanti argomenti di base di SQL, come GROUP BY, JOINs, WHERE, e le operazioni di set (UNION, INTERSECT, EXCEPT).

Le sfumature intermedie e avanzate di GROUP BY sono trattate nel corsoCome creare semplici report SQL . Qui imparerete ad aggregare i dati, a utilizzare l'istruzione CASE WHEN, a creare metriche, rapporti e confronti di dati più complessi e a lavorare con le espressioni di tabella comuni (CTE). Per saperne di più, consultate questo articolo sul corso Come creare semplici report SQL .

Iniziamo questa panoramica con alcune domande di base per il colloquio!

Domande di base sul GROUP BY

1: Cosa significa GROUP BY fa?

La clausola GROUP BY in SQL organizza l'output della query in gruppi, con tutte le righe con lo stesso valore in una determinata colonna appartenenti a un gruppo. Ad esempio, se si dispone di una tabella che memorizza i dati dei dipendenti, è possibile contare i dipendenti per reparto o trovare lo stipendio medio per ogni reparto. GROUP BY viene solitamente utilizzato con le funzioni aggregate come COUNT(), SUM(), AVG(), MIN(), MAX().

Una panoramica più approfondita di GROUP BY è disponibile nel nostro articolo Come funziona il GROUP BY in SQL?

2: Utilizzare la tabella film_streaming per scrivere tre query.

È tipico dell'intervistatore chiedere al candidato di scrivere una query utilizzando la clausola GROUP BY. Mostreremo tre esempi che illustrano argomenti comuni di GROUP BY.

La tabella movie_streaming contiene statistiche sul numero di volte in cui un film è stato trasmesso in streaming in ogni giorno.

iddatemoviedirectornumber_of_streams
12022-04-01FargoCoen brothers495
22022-04-01The Big LebowskiCoen brothers512
32022-04-01No Country for Old MenCoen brothers270
42022-04-01DogtoothYorgos Lanthimos157
52022-04-01The LobsterYorgos Lanthimos247
62022-04-01The Killing of a Sacred DeerYorgos Lanthimos320
72022-04-02FargoCoen brothers321
82022-04-02The Big LebowskiCoen brothers905
92022-04-02No Country for Old MenCoen brothers308
102022-04-02DogtoothYorgos Lanthimos233
112022-04-02The LobsterYorgos Lanthimos405
122022-04-02The Killing of a Sacred DeerYorgos Lanthimos109

2a: Trova il numero totale di streaming per data.

Questa domanda chiede di raggruppare i dati in base a una sola colonna:

SELECT date,
	 SUM(number_of_streams) AS total_number_of_streams
FROM movie_streaming
GROUP BY date;

Il codice in uscita sarà:

datetotal_number_of_streams
2022-04-012,001
2022-04-022,281

Il raggruppamento viene effettuato sulla colonna data e la funzione aggregata SUM() viene utilizzata per ottenere il numero di flussi per data.

2b: Trovare il numero totale di flussi per date e director.

Per ottenere una risposta a questa domanda, i dati devono essere raggruppati per due colonne. Per fare ciò, le colonne data e director devono essere indicate in GROUP BY e separate da una virgola.

SELECT date,
	 director,
	 SUM(number_of_streams) AS total_number_of_streams
FROM movie_streaming
GROUP BY date, director;

Questo è il risultato del codice:

datedirectortotal_number_of_streams
2022-04-01Yorgos Lanthimos724
2022-04-02Coen brothers1,534
2022-04-02Yorgos Lanthimos747
2022-04-01Coen brothers1,277

2c: Trova il numero totale di flussi per data e direttore. Mostra solo le date con un numero totale di flussi superiore a 740.

SELECT date,
	 director,
	 SUM(number_of_streams) AS total_number_of_streams
FROM movie_streaming
GROUP BY date, director
HAVING SUM(number_of_streams) > 740;

I dati sono nuovamente raggruppati dalle colonne date e director. La clausola HAVING e la funzione SUM() vengono utilizzate per mostrare solo i flussi totali superiori a 740. (SUM() somma il numero di flussi giornalieri; HAVING filtra i flussi che non soddisfano la quantità minima).

L'esecuzione della query restituirà:

datedirectortotal_number_of_streams
2022-04-02Coen brothers1,534
2022-04-02Yorgos Lanthimos747
2022-04-01Coen brothers1,277

Per maggiori dettagli su questi concetti, consultare questo articolo che spiega il funzionamento di GROUP BY.

3: Come si filtrano i gruppi in una query SQL?

I gruppi in una query SQL vengono filtrati utilizzando la clausola HAVING. HAVING non può essere utilizzata senza GROUP BY; viene sempre scritta dopo GROUP BY e il suo scopo è quello di filtrare i dati risultanti da una funzione di aggregazione, ad esempio trovando i gruppi il cui conteggio è superiore a un determinato numero, ecc.

È importante notare che la clausola WHERE è usata anche per filtrare in una query SQL. Mentre HAVING è usata per filtrare i gruppi, WHERE filtra le righe. In altre parole, WHERE filtra i dati prima di aggregarli.

4: Qual è la differenza tra WHERE e HAVING in SQL?

Sia WHERE che HAVING sono utilizzati per filtrare i dati in una query SQL. La differenza principale è che WHERE viene utilizzato per i valori non aggregati, mentre HAVING per quelli aggregati. L'ordine di esecuzione è il seguente: WHERE - GROUP BY - HAVING. Ciò significa anche che WHERE viene scritto prima di GROUP BY, mentre HAVING viene dopo GROUP BY.

In pratica, WHERE filtra i dati per primo. I dati filtrati saranno raggruppati e aggregati, quindi HAVING filtrerà i dati raggruppati e aggregati.

Ad esempio, si può usare WHERE per filtrare solo gli utenti che sono stati impiegati per più di un anno. Poi si può calcolare lo stipendio medio dei dipendenti con più di un anno di esperienza per reparto. Infine, è possibile mostrare solo i reparti con uno stipendio medio superiore a un valore specifico utilizzando la clausola HAVING. In questo modo, si filtrano le righe prima e dopo la funzione aggregata. Consultate questo articolo per una spiegazione dettagliata delle differenze tra WHERE e HAVING .

Domande intermedie e avanzate su GROUP BY

5: Quali funzioni possono essere utilizzate con GROUP BY?

La clausola GROUP BY viene solitamente utilizzata con le funzioni aggregate di SQL. Queste prendono i valori da singole righe, eseguono un calcolo e restituiscono un singolo valore. Alcune delle funzioni aggregate più utilizzate sono:

  • SUM() - Somma tutti i valori delle righe.
  • COUNT() - Conta il numero di righe.
  • AVG() - Restituisce il valore medio.
  • MIN() - Restituisce il valore più piccolo.
  • MAX() - Restituisce il valore più grande.

6: Qual è la differenza tra COUNT(*), COUNT(expression) e COUNT(DISTINCT expression)?

COUNT(*) restituisce il numero di righe, comprese le righe duplicate e quelle con valori NULL.

È diverso da COUNT(expression), che restituisce solo il numero di righe con valori diversi daNULL. Conta anche le righe con valori duplicati.

Se si aggiunge la parola chiave DISTINCT, le righe duplicate saranno ignorate, così come le righe con valori NULL. In questo modo si ottiene il numero di righe uniche o distinte.

Questo articolo sui tre usi della funzione COUNT() spiega le differenze in modo più dettagliato.

7: Cosa succede a NULL quando si usa GROUP BY?

La clausola GROUP BY non ignora i valori NULL. Pertanto, se la si utilizza e nella colonna sono presenti valori NULL, tutte le righe con valori della colonna NULL saranno trattate come un unico gruppo.

Come funziona in pratica? Ecco una spiegazione più dettagliata di GROUP BY e NULL, con esempi pratici.

8: Cosa restituisce questo codice?

SELECT department,
       month,
 AVG(salary) AS average_salary
FROM salaries
GROUP BY department;

Questo codice darà un errore perché la colonna mese non è scritta nell'istruzione GROUP BY. L'errore si verifica perché tutte le colonne che compaiono nell'istruzione SELECT devono comparire nell'istruzione GROUP BY. Questo errore "non è un'espressione GROUP BY" deve essere risolto.

Affinché il codice funzioni, dovrebbe essere scritto in questo modo:

SELECT department,
       month,
 	 AVG(salary) AS average_salary
FROM salaries
GROUP BY department, month;

Ora questa query produrrà il salario medio per mese e per reparto.

Tuttavia, tutte le colonne che compaiono nella clausola GROUP BY non devono necessariamente comparire nell'istruzione SELECT. Pertanto, il codice di cui sopra potrebbe avere un aspetto simile a questo e non restituire un errore:

SELECT department,
 	 AVG(salary) AS average_salary
FROM salaries
GROUP BY department, month;

Anche se questo codice funzionerà e restituirà i valori medi corretti, il fatto di non mostrare le informazioni sul mese significa che sarà impossibile decifrare quale stipendio medio si riferisce a quale mese.

9: Cosa sono i GROUP BY estensioni? Che cosa ESTENSIONI GROUP BY conoscete?

GROUP BY Le estensioni potenziano le possibilità della clausola GROUP BY, consentendo la creazione di report più complessi attraverso un raggruppamento dei dati più sofisticato.

Queste estensioni sono ROLLUP, CUBE e GROUPING SETS. L'estensione ROLLUP viene utilizzata soprattutto per calcolare i totali parziali dei dati gerarchici. Assume la relazione gerarchica tra i dati, creando subtotali per ogni livello e il totale generale.

L'estensione CUBE è simile, ma crea tutte le possibili combinazioni di dati e restituisce i loro totali parziali e un totale generale.

La terza estensione è GROUPING SETS. Permette di scrivere le clausole multiple di GROUP BY in una sola clausola di GROUP BY. Questo deriva dalla definizione di un insieme di raggruppamenti, ovvero un gruppo di colonne in base alle quali si desidera raggruppare i dati.

Per vedere come funzionano in pratica queste estensioni, si consiglia di consultare il corso GROUP BY Extensions.

Preparatevi per il vostro colloquio di lavoro in SQL!

Questa è stata una panoramica delle domande più comuni nei colloqui di lavoro SQL, incentrate sulla clausola GROUP BY.

GROUP BY è un concetto importante. Senza usarlo come se fosse una seconda natura, non riuscirete a fare colpo al colloquio di lavoro. Questo articolo vi ha dato una buona idea di ciò che potete aspettarvi.

Ma non basta conoscere i concetti. Occorre anche fare pratica, e fare pratica significa scrivere molto codice utilizzando il sito GROUP BY. Il nostro SQL per principianti e Come creare semplici report SQL vi daranno un'opportunità strutturata per fare esattamente questo!