SQL Interview Vragen: 3 Tech Screening Exercises (For Data Analysts)

De afgelopen 6 jaar heb ik deelgenomen aan veel sollicitatiegesprekken – aan beide kanten van de tafel. Het leukste, maar ook het meest gevreesde deel van het proces is de technische screening. In dit artikel laat ik je drie SQL test oefeningen zien die, in mijn ervaring, vrij typisch zijn in data analist sollicitatiegesprekken. (En hé, dit zijn “voorbeeld” SQL-interviewvragen, maar ze zijn zwaar gebaseerd op de werkelijkheid!)

Voor de taken – Wat kun je verwachten bij een SQL-technische screening?

Er zijn twee veel voorkomende manieren waarop een SQL-technische screening kan worden uitgevoerd.

De eenvoudigste, maar minder gebruikelijke manier is dat je een computer, een dataset en een taak krijgt. Terwijl u de taak oplost, kijken de interviewers toe en stellen vragen. Een beetje trial and error is helemaal prima, zolang je maar binnen een redelijke tijd met de juiste oplossing komt.

De andere, moeilijkere (en overigens veel gangbaardere) manier is het whiteboard interview. In dit geval krijg je geen computer. Je moet de opdracht oplossen en de code op een whiteboard schetsen. Dit betekent dat je geen feedback krijgt (althans niet van een computer) over of je een logische of een syntaxisfout in je code hebt gemaakt. Natuurlijk kun je de opgaven nog steeds oplossen door iteratief te denken (door de verschillende SQL-problemen een voor een op te lossen), maar dan moet je wel heel zeker zijn van je SQL-vaardigheden.

Daarnaast moet je de opgaven meestal ‘on the fly’ oplossen. Misschien krijg je 3-5 minuten bedenktijd, maar dat is het maximum dat je kunt verwachten. Het goede nieuws is dat je daardoor relatief eenvoudigere opgaven krijgt. (Zie de moeilijkheidsgraad hieronder!)

Note: er zijn andere soorten technische screening – zoals de take-home opdracht – waar je kunt bewijzen dat je ook complexere coderingsuitdagingen kunt oplossen.

Test jezelf!

Hier zijn drie SQL-interviewvragen die heel dicht in de buurt komen van wat ik echt heb gekregen of gegeven op data-analist/wetenschapper sollicitatiegesprekken.
Probeer ze allemaal op te lossen alsof het whiteboard-interviews zijn.
In de tweede helft van het artikel laat ik je ook de oplossingen zien.

SQL-interviewvraag #1

Let’s say you have two SQL tables: authors en books.
De authors dataset heeft meer dan 1M rijen; hier zijn de eerste zes rijen:

auteur_naam boek_naam
auteur_1 boek_1
auteur_1 boek_2
auteur_2 boek_3
auteur_2 boek_4
auteur_2 boek_5
auteur_3 boek_6

De books dataset heeft ook 1M+ rijen en hier zijn de eerste zes:

book_name sold_copies
book_1 1000
book_2 1500
book_3 34000
boek_4 29000
boek_5 40000
boek_6 4400

Maak een SQL query die de TOP 3 auteurs laat zien die in totaal de meeste boeken hebben verkocht!

(Opmerking: ik kreeg een zeer, zeer vergelijkbare SQL-gespreksvraag voor een positie als data scientist bij een zeer bekend Zweeds IT-bedrijf.)

SQL-gespreksvraag #2

Je werkt voor een startup die een online presentatiesoftware maakt. U hebt een gebeurtenislogboek dat elke keer dat een gebruiker een afbeelding in een presentatie invoegt, registreert. (Een gebruiker kan meerdere afbeeldingen invoegen.) De event_log SQL tabel ziet er als volgt uit:

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

…en het heeft meer dan een miljard rijen.
Note: als het formaat van de kolom event_date_time je niet bekend voorkomt, google dan eens op “epoch timestamp”!

Schrijf een SQL query om uit te vinden hoeveel gebruikers meer dan 1000 maar minder dan 2000 afbeeldingen in hun presentaties hebben opgenomen!

(Opmerking: ik heb deze vraag zelf gemaakt en gebruikt om data-analisten te testen toen ik nog freelancer was en mijn klanten hulp nodig hadden bij hun wervingsproces.)

SQL Interview Vraag #3

Je hebt twee SQL tabellen! De eerste heet employees en bevat de namen van de werknemers, de unieke werknemers-id’s en de afdelingsnamen van een bedrijf. Voorbeeld:

department_name employee_id employee_name
Sales 123 John Doe
Sales 211 Jane Smith
HR 556 Billy Bob
Sales 711 Robert Hayek
Marketing 235 Edward Jorgson
Marketing 236 Christine Packard

De tweede heet salaries. Het bevat dezelfde werknemersnamen en dezelfde werknemers-id’s – en de salarissen voor elke werknemer. Voorbeeld:

salaris werknemer_id werknemer_naam
500 123 John Doe
600 211 Jane Smith
1000 556 Billy Bob
400 711 Robert Hayek
1200 235 Edward Jorgson
200 236 Christine Packard

Het bedrijf heeft 546 werknemers, dus beide tabellen hebben 546 rijen.

Print elke afdeling waar het gemiddelde salaris per werknemer lager is dan $500!

(Opmerking: ik heb deze testvraag gemaakt op basis van een echte SQL-gespreksvraag die ik hoorde van een vriend, die solliciteerde bij een van de grootste sociale-mediabedrijven (naam begint met ‘F.’ :))

Oplossing van SQL Interview Vraag #1

De oplossingscode is:

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;

En hier is een korte uitleg:

1. Eerst moet je de JOIN starten. Ik heb de twee tabellen samengevoegd door gebruik te maken van:

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

2. Daarna heb ik een SUM() functie gebruikt met een GROUP BY clausule. Dit betekent dat ik in het SELECT statement de * moest vervangen door de author_name en sold_copies kolommen. (Het is niet verplicht om aan te geven uit welke tabel je de kolommen selecteert, maar het is wel de moeite waard. Daarom heb ik authors.author_name en books.sold_copies gebruikt.)

3. Uiteindelijk heb ik ORDER de resultaten in DESCeindigende volgorde gezet. (Voor het gemak heb ik ook de sum kolom hernoemd naar sold_sum met behulp van de AS sold_sum methode in het SELECT statement.)

Oplossing van SQL Interview Vraag #2

De SQL query is:

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;

De truc in deze opgave is dat je de COUNT() functie twee keer moest gebruiken: eerst moest je het aantal afbeeldingen per gebruiker tellen, daarna het aantal gebruikers (dat aan de gegeven voorwaarde voldoet). De eenvoudigste manier om dat te doen is door een subquery te gebruiken.

  1. Schrijf eerst de binnenste query! Voer een eenvoudige COUNT() functie uit met een GROUP BY clausule op de event_log tabel.
  2. Zorg ervoor dat u een alias maakt voor de subquery (AS image_per_user). Het is een syntaxis vereiste in SQL.
  3. Eventueel, in een outer query, pas een WHERE filter en een COUNT() functie toe op het resultaat van de subquery.

Oplossing van SQL Interview Vraag #3

Oplossing:

SELECT department_name, AVG(salaries.salary) AS avg_salariesFROM employeesJOIN salariesON employees.employee_id = salaries.employee_idGROUP BY department_nameHAVING AVG(salaries.salary) < 500;

Note: U kunt deze opgave ook oplossen met behulp van een subquery – maar in een interview situatie zal de commissie de bovenstaande oplossing beter vinden.

Korte uitleg:

1. Koppel eerst de twee tabellen:

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

Let op! Gebruik de kolom employee_id – niet de kolom employee_name. (U kunt altijd twee John Does bij een bedrijf hebben, maar de werknemer-id is uniek!)

2. Gebruik vervolgens een AVG()-functie met een GROUP BY-clausule – en vervang de * door de juiste kolommen. (Net als in de eerste opgave.)

3. En de laatste stap is het gebruik van een HAVING clausule om te filteren op het resultaat van de AVG() functie. (Denk eraan: WHERE is hier niet goed, omdat het zou worden geïnitieerd vóór de AVG() functie.)
Waarschuwing: in de HAVING regel, kun je niet verwijzen naar de alias – je moet de hele functie zelf weer gebruiken!

Vereid je voor op SQL tech screenings door te oefenen!

Als het je gelukt is om al deze vragen goed op te lossen, ben je waarschijnlijk klaar voor een junior of zelfs voor een mid-level Data Analist SQL technische screening.
Zo niet, laat me je dan mijn nieuwe online cursus aanraden: SQL for Aspiring Data Scientists (7-daagse online cursus) – waar je in slechts 7 dagen je SQL-vaardigheden op een hoger niveau kunt brengen (of bijspijkeren). Als je klaar bent met de cursus, kom je gewoon terug naar dit artikel en ik garandeer je dat je deze vragen zult kunnen oplossen!

SQL for Aspiring Data Scientists (7-daagse online cursus)

En als je net begint met SQL, begin dan met mijn SQL For Data Analysis-serie op de blog!

Conclusie

Het lastige van deze SQL-interviewvragen is dat ze abstract zijn. De opgaven zeggen dat je “je de datasets moet voorstellen” en er slechts een paar regels van moet laten zien. Als je zo’n oefening krijgt, helpt het enorm als je soortgelijke datasets hebt gezien en soortgelijke problemen eerder hebt opgelost. Ik hoop dat het oplossen van de opgaven in dit artikel je zelfvertrouwen zal doen toenemen!

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.