Domande per le interviste SQL: 3 esercizi di screening tecnico (per analisti di dati)

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 ORDERordinato i risultati in DESCfine. (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.

  1. Scrivi prima la query interna! Esegui una semplice funzione COUNT() con una clausola GROUP BY sulla tabella event_log.
  2. Assicurati di creare un alias per la subquery (AS image_per_user). E’ un requisito sintattico in SQL.
  3. Eventualmente, in una query esterna, applicate un filtro WHERE e una funzione COUNT() 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!

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.