Întrebări de interviu SQL: 3 Tech Screening Exercises (For Data Analysts)

În ultimii 6 ani am luat parte la multe interviuri de angajare – de ambele părți ale mesei. Cea mai amuzantă, dar și cea mai temută, parte a procesului este screening-ul tehnic. În acest articol, vă voi arăta trei exerciții de testare SQL care, din experiența mea, sunt destul de tipice în interviurile de angajare pentru analiști de date. (Și, hei, acestea sunt „mostre” de întrebări de interviu SQL, dar se bazează foarte mult pe realitate!)

Înainte de sarcini – La ce vă puteți aștepta la un screening tehnic SQL?

Există două moduri obișnuite în care se poate face un screening tehnic SQL.

Modul mai simplu, dar mai puțin obișnuit, este că primiți un calculator, un set de date și o sarcină. În timp ce rezolvați sarcina, intervievatorii vă urmăresc și vă pun întrebări. Un pic de încercare și eroare este în totalitate în regulă, atâta timp cât puteți găsi soluția corectă într-un timp rezonabil.

Celălalt mod, mai dificil (și, apropo, mult mai comun) este interviul cu tablă albă. În acest caz, nu primești un calculator. Trebuie să rezolvi sarcina și să schițezi codul pe o tablă albă. Acest lucru înseamnă că nu veți primi feedback (cel puțin nu de la un computer) pentru a afla dacă ați făcut o eroare logică sau de sintaxă în codul dumneavoastră. Desigur, puteți în continuare să rezolvați sarcinile gândind iterativ (rezolvând diferitele probleme SQL una câte una), dar trebuie să fiți foarte încrezători în abilitățile dumneavoastră SQL.

În plus, de obicei trebuie să rezolvați sarcinile din mers. Poate că veți avea 3-5 minute de timp de gândire, dar acesta este maximul la care vă puteți aștepta. Vestea bună este că, din această cauză, veți primi sarcini relativ mai simple. (Vedeți nivelul de dificultate mai jos!)

Note: există și alte tipuri de screening tehnic – cum ar fi tema de acasă – în care puteți dovedi că puteți rezolva și provocări de codare mai complexe.

Testați-vă!

Iată trei întrebări de interviu SQL care sunt foarte apropiate de ceea ce am primit sau am dat în realitate la interviurile de angajare ca analist de date/științific!
Încercați să le rezolvați pe toate ca și cum ar fi interviuri pe tablă!
În a doua parte a articolului, vă voi arăta și soluțiile!

Întrebare de interviu SQL #1

Să spunem că aveți două tabele SQL: authors și books.
Setul de date authors are 1M+ rânduri; iată primele șase rânduri:

.

numele autorului numele cărții
autor_1 carte_1
autor_1 carte_2
autor_2 carte_3
autor_2 carte_4
autor_2 carte_5
autor_3 carte_6

Setul de date books are, de asemenea, peste 1M de rânduri și iată primele șase:

.

numele cărții copii vândute
carte_1 1000
carte_2 1500
carte_3 34000
book_4 29000
book_5 40000
book_6 4400

Creați o interogare SQL care să arate TOP 3 autori care au vândut cele mai multe cărți în total!

(Notă: Am primit o întrebare de interviu SQL foarte, foarte asemănătoare pentru un post de data scientist la o companie suedeză de IT foarte cunoscută.)

Întrebare de interviu SQL #2

Lucrați pentru un start-up care face un software de prezentare online. Aveți un jurnal de evenimente care înregistrează de fiecare dată când un utilizator a inserat o imagine într-o prezentare. (Un utilizator poate insera mai multe imagini.) Tabelul event_log SQL arată în felul următor:

.

user_id event_date_time
7494212 1535308430
7494212 1535308433
1475185 1535308444
6946725 1535308475
6946725 1535308476
6946725 1535308477

…și are peste un miliard de rânduri.Nota: Dacă formatul coloanei event_date_time nu vi se pare familiar, căutați pe Google „epoch timestamp”!

Scrieți o interogare SQL pentru a afla câți utilizatori au inserat mai mult de 1000 dar mai puțin de 2000 de imagini în prezentările lor!

(Notă: Eu personal am creat și am folosit această întrebare de interviu pentru a testa analiștii de date atunci când lucram ca freelancer și clienții mei aveau nevoie de ajutor în procesul de angajare.)

Întrebare de interviu SQL #3

Aveți două tabele SQL! Prima se numește employees și conține numele angajaților, ID-urile unice ale angajaților și numele departamentelor unei companii. Exemplu:

.

.

denumire_departament identificare_angajat denumire_angajat
Vânzări 123 John Doe
Sales 211 Jane Smith
HR 556 Billy Bob
Vânzări 711 Robert Hayek
Marketing 235 Edward Jorgson
Marketing 236 Christine Packard

Cel de-al doilea se numește salaries. Acesta conține aceleași nume de angajați și aceleași ID-uri ale angajaților – și salariile pentru fiecare angajat. Exemplu:

.

.

.

salariu identificator angajat numele_angajat
500 123 John Doe
600 211 Jane Smith
1000 556 Billy Bob
400 711 Robert Hayek
1200 235 Edward Jorgson
200 236 Christine Packard

Compania are 546 de angajați, deci ambele tabele au 546 de rânduri.

Imprimați fiecare departament în care salariul mediu pe angajat este mai mic de 500$!

(Notă: Am creat această întrebare de test pe baza unei întrebări reale de interviu SQL pe care am auzit-o de la un prieten, care a aplicat la una dintre cele mai mari companii de social media (numele începe cu ‘F.’ :))

Soluția întrebării de interviu SQL nr. 1

Codul soluției este:

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;

Și iată și o scurtă explicație:

1. Mai întâi trebuie să inițiați JOIN. Eu am unit cele două tabele folosind:

SELECT *FROM authorsJOIN booksON books.book_name = authors.book_name;

2. După aceea, am folosit o funcție SUM() cu o clauză GROUP BY. Acest lucru înseamnă că în instrucțiunea SELECT a trebuit să înlocuiesc * cu coloanele author_name și sold_copies. (Nu este obligatoriu să indicați din ce tabel selectați coloanele, dar merită. De aceea, am folosit authors.author_name și books.sold_copies.)

3. În cele din urmă, am ORDERașezat rezultatele în DESCordinea finală. (Doar pentru comoditatea mea, am redenumit și coloana sum în sold_sum folosind metoda AS sold_sum în instrucțiunea SELECT.)

Soluția întrebării de interviu SQL nr. 2

Interogarea SQL este:

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;

Trucul în această sarcină este că a trebuit să folosiți funcția COUNT() de două ori: mai întâi, a trebuit să numărați numărul de imagini pe utilizator, apoi numărul de utilizatori (care îndeplinesc condiția dată). Cel mai simplu mod de a face acest lucru este să folosiți o subinterogare.

  1. Scrieți mai întâi interogarea interioară! Rulați o simplă funcție COUNT() cu o clauză GROUP BY asupra tabelului event_log.
  2. Asigurați-vă că ați creat un alias pentru subinterogare (AS image_per_user). Este o cerință de sintaxă în SQL.
  3. Eventual, într-o interogare exterioară, aplicați un filtru WHERE și o funcție COUNT() asupra rezultatului subinterogării.

Soluția întrebării de interviu SQL nr. 3

Soluție:

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: Puteți rezolva această sarcină folosind și o subinterogare – dar în situația unui interviu, comisia va prefera soluția de mai sus.

Explicație succintă:

1. Mai întâi faceți JOIN-ul celor două tabele:

SELECT *FROM employeesJOIN salariesON employees.employee_id = salaries.employee_id

Atenție! Folosiți coloana employee_id – nu employee_name. (Întotdeauna puteți avea doi John Does la o companie, dar ID-ul angajatului este unic!)

2. Folosiți apoi o funcție AVG() cu o clauză GROUP BY – și înlocuiți * cu coloanele corespunzătoare. (La fel ca în prima sarcină.)

3. Și ultimul pas este să folosiți o clauză HAVING pentru a filtra după rezultatul funcției AVG(). (Țineți minte: WHERE nu este bună aici, deoarece ar fi inițiată înainte de funcția AVG().)
Atenție: în linia HAVING, nu puteți face referire la alias – trebuie să folosiți din nou întreaga funcție în sine!

Pregătiți-vă pentru verificările tehnice SQL exersând!

Dacă ați reușit să rezolvați corect toate aceste întrebări, probabil că sunteți pregătit pentru un screening tehnic SQL de nivel junior sau chiar pentru un nivel mediu de analist de date.
Dacă nu, permiteți-mi să vă recomand noul meu curs online: SQL for Aspiring Data Scientists (curs online de 7 zile) – unde puteți să vă îmbunătățiți (sau să vă perfecționați) competențele SQL în doar 7 zile. Când terminați cursul, doar reveniți la acest articol și vă garantez că veți putea rezolva aceste întrebări!

SQL for Aspiring Data Scientists (curs online de 7 zile)

Și dacă sunteți pe cale să începeți cu SQL, începeți cu seria mea SQL For Data Analysis de pe blog!

Concluzie

Partea grea a acestor întrebări de interviu SQL este că sunt abstracte. Sarcinile spun să vă „imaginați seturile de date” și să arătați doar câteva rânduri din ele. Când primești un astfel de exercițiu, te ajută foarte mult dacă ai văzut seturi de date similare și ai rezolvat probleme similare înainte. Sper că rezolvarea sarcinilor din acest articol vă va spori încrederea!

.

Lasă un răspuns

Adresa ta de email nu va fi publicată.