Negli ultimi 6 anni ho fatto parte di molti colloqui di lavoro – da entrambe le parti del tavolo. La parte più divertente, ma anche la più temuta, del processo è lo screening tecnico. In questo articolo, vi mostrerò tre esercizi di test SQL che, secondo la mia esperienza, sono abbastanza tipici nei colloqui di lavoro degli analisti di dati. (E hey, questi sono “esempi” di domande per il colloquio SQL ma sono pesantemente basati sulla realtà!)
Prima dei compiti – Cosa ci si può aspettare in uno screening tecnico SQL?
Ci sono due modi comuni in cui uno screening tecnico SQL può essere fatto.
Il modo più semplice ma meno comune è che si prende un computer, un set di dati e un compito. Mentre si risolve il compito, gli intervistatori guardano e fanno domande. Un po’ di tentativi ed errori vanno benissimo, purché si riesca a trovare la soluzione corretta in un tempo ragionevole.
L’altro modo, più difficile (e comunque molto più comune) è l’intervista con la lavagna. In questo caso, non hai un computer. Devi risolvere il compito e abbozzare il codice su una lavagna. Questo significa che non avrete un feedback (almeno non da un computer) per sapere se avete fatto un errore logico o di sintassi nel vostro codice. Naturalmente, puoi ancora risolvere i compiti pensando iterativamente (risolvendo i diversi problemi SQL uno per uno), ma devi essere molto sicuro delle tue abilità SQL.
Inoltre, di solito devi risolvere i compiti al volo. Forse avrete 3-5 minuti di tempo per pensare, ma questo è il massimo che potete aspettarvi. La buona notizia è che a causa di ciò otterrai compiti relativamente più semplici. (Vedi il livello di difficoltà qui sotto!)
Nota: ci sono altri tipi di screening tecnico – come il compito a casa – dove puoi dimostrare che puoi risolvere anche sfide di codifica più complesse.
Testati!
Queste sono tre domande da colloquio SQL che sono molto simili a quelle che ho ricevuto o dato nei colloqui di lavoro per analisti di dati/scienziati!
Prova a risolverle tutte come se fossero interviste alla lavagna!
Nella seconda metà dell’articolo, ti mostrerò anche le soluzioni!
Domanda da colloquio SQL #1
Diciamo che hai due tabelle SQL: authors
e books
.
Il set di dati authors
ha 1M+ righe; ecco le prime sei righe:
nome_autore | nome_libro |
autore_1 | libro_1 |
autore_1 | libro_2 |
autore_2 | libro_3 |
autore_2 | libro_4 |
autore_2 | libro_5 |
autore_3 | libro_6 |
… | … |
Anche il dataset books
ha 1M+ righe ed ecco le prime sei:
nome_libro | venduto_copie |
libro_1 | 1000 |
libro_2 | 1500 |
libro_3 | 34000 |
book_4 | 29000 |
book_5 | 40000 |
book_6 | 4400 |
… | … |
Crea una query SQL che mostra i TOP 3 autori che hanno venduto più libri in totale!
(Nota: ho ricevuto una domanda molto, molto simile per un colloquio SQL per una posizione di scienziato dei dati in un’azienda IT svedese molto nota.)
Domanda di intervista SQL #2
Lavori per una startup che produce un software di presentazione online. Avete un registro eventi che registra ogni volta che un utente ha inserito un’immagine in una presentazione. (Un utente può inserire più immagini.) La tabella event_log
SQL assomiglia a questa:
user_id | event_date_time | |
7494212 | 1535308430 | |
7494212 | 1535308433 | |
1475185 | 1535308433 | 1535308444 |
6946725 | 1535308475 | |
6946725 | 1535308476 | |
6946725 | 1535308477 | |
… | … |
…e ha più di un miliardo di righe.
Nota: se il formato della colonna event_date_time
non ti sembra familiare, cerca su Google “epoch timestamp”!
Scrivi una query SQL per scoprire quanti utenti hanno inserito più di 1000 ma meno di 2000 immagini nelle loro presentazioni!
(Nota: ho personalmente creato e usato questa domanda di intervista per testare gli analisti di dati quando ero freelance e i miei clienti avevano bisogno di aiuto nel loro processo di assunzione.)
Domanda di intervista SQL #3
Hai due tabelle SQL! La prima si chiama employees
e contiene i nomi dei dipendenti, gli id unici dei dipendenti e i nomi dei dipartimenti di un’azienda. Esempio:
nome_dipartimento | id dipendente | nome_dipendente |
vendite | 123 | John Doe |
Vendite | 211 | Jane Smith |
HR | 556 | Billy Bob |
Sales | 711 | Robert Hayek |
Marketing | 235 | Edward Jorgson |
Marketing | 236 | Christine Packard |
… | … | … |
La seconda si chiama salaries
. Contiene gli stessi nomi dei dipendenti e gli stessi id dei dipendenti – e gli stipendi per ogni dipendente. Esempio:
salario | id dipendente | nome dipendente |
500 | 123 | John Doe |
600 | 211 | Jane Smith |
1000 | 556 | Billy Bob |
400 | 711 | Robert Hayek |
1200 | 235 | Edward Jorgson |
200 | 236 | Christine Packard |
… | … | … |
L’azienda ha 546 dipendenti, quindi entrambe le tabelle hanno 546 righe.
Stampa ogni dipartimento in cui lo stipendio medio per dipendente è inferiore a $500!
(Nota: ho creato questa domanda di test basandomi su una vera domanda di intervista SQL che ho sentito da un amico, che ha fatto domanda in una delle più grandi aziende di social media (il nome inizia con ‘F.’ :))
Soluzione della domanda di intervista SQL #1
Il codice della soluzione è:
SELECT authors.author_name, SUM(books.sold_copies) AS sold_sumFROM authorsJOIN booksON books.book_name = authors.book_nameGROUP BY authors.author_nameORDER BY sold_sum DESCLIMIT 3;
E qui c’è una breve spiegazione:
1. Prima dovete avviare il JOIN
. Ho unito le due tabelle usando:
SELECT *FROM authorsJOIN booksON books.book_name = authors.book_name;
2. Dopo, ho usato una funzione SUM()
con una clausola GROUP BY
. Ciò significa che nella dichiarazione SELECT
ho dovuto sostituire il *
con le colonne author_name
e sold_copies
. (Non è obbligatorio indicare da quale tabella state selezionando le colonne, ma ne vale la pena. Ecco perché ho usato authors.author_name
e books.sold_copies
.)
3. Alla fine, ho ORDER
ordinato i risultati in DESC
fine. (Solo per mia comodità, ho anche rinominato la colonna sum
in sold_sum
usando il metodo AS sold_sum
nella dichiarazione SELECT
.)
Soluzione della domanda di intervista SQL #2
La query SQL è:
SELECT COUNT(*) FROM (SELECT user_id, COUNT(event_date_time) AS image_per_user FROM event_log GROUP BY user_id) AS image_per_userWHERE image_per_user < 2000 AND image_per_user > 1000;
Il trucco in questo compito è che hai dovuto usare la funzione COUNT()
due volte: prima, hai dovuto contare il numero di immagini per utente, poi il numero di utenti (che soddisfano la condizione data). Il modo più semplice per farlo è usare una subquery.
- Scrivi prima la query interna! Esegui una semplice funzione
COUNT()
con una clausolaGROUP BY
sulla tabellaevent_log
. - Assicurati di creare un alias per la subquery (
AS image_per_user
). E’ un requisito sintattico in SQL. - Eventualmente, in una query esterna, applicate un filtro
WHERE
e una funzioneCOUNT()
sul risultato della subquery.
Soluzione della domanda di intervista SQL #3
Soluzione:
SELECT department_name, AVG(salaries.salary) AS avg_salariesFROM employeesJOIN salariesON employees.employee_id = salaries.employee_idGROUP BY department_nameHAVING AVG(salaries.salary) < 500;
Nota: Puoi risolvere questo compito usando anche una subquery – ma in una situazione di intervista la commissione preferirà la soluzione precedente.
Spiegazione breve:
1. Prima unisci le due tabelle:
SELECT *FROM employeesJOIN salariesON employees.employee_id = salaries.employee_id
Attenzione! Usa la colonna employee_id
– non la employee_name
. (Puoi sempre avere due John Does in un’azienda, ma l’id del dipendente è unico!)
2. Poi usa una funzione AVG()
con una clausola GROUP BY
– e sostituisci il *
con le colonne appropriate. (Proprio come nel primo compito.)
3. E l’ultimo passo è usare una clausola HAVING
per filtrare il risultato della funzione AVG()
. (Ricordate: WHERE
non va bene qui perché verrebbe iniziata prima della funzione AVG()
.)
Attenzione: nella linea HAVING
, non puoi fare riferimento all’alias – devi usare di nuovo l’intera funzione stessa!
Preparati ai controlli tecnici SQL facendo pratica!
Se sei riuscito a risolvere tutte queste domande correttamente, probabilmente sei pronto per un junior o anche per uno screening tecnico di medio livello per Data Analyst SQL.
Se no, lascia che ti consigli il mio nuovo corso online: SQL for Aspiring Data Scientists (corso online di 7 giorni) – dove puoi migliorare (o ripassare) le tue competenze SQL in soli 7 giorni. Quando avrai finito il corso, torna su questo articolo e ti garantisco che sarai in grado di risolvere queste domande!
SQL for Aspiring Data Scientists (7-day online course)
E se stai per iniziare con SQL, inizia con la mia serie SQL For Data Analysis sul blog!
Conclusione
La parte difficile di queste domande da colloquio SQL è che sono astratte. I compiti dicono di “immaginare gli insiemi di dati” e mostrare solo alcune righe di essi. Quando si ottiene un esercizio come questo, aiuta molto se avete visto insiemi di dati simili e risolto problemi simili prima. Spero che risolvere i compiti in questo articolo aumenti la vostra fiducia!