Az elmúlt 6 év során számos állásinterjún vettem részt – az asztal mindkét oldalán. A folyamat legszórakoztatóbb, de egyben legrettegettebb része a technikai szűrés. Ebben a cikkben három olyan SQL tesztgyakorlatot mutatok be, amelyek tapasztalatom szerint eléggé jellemzőek az adatelemzői állásinterjúkon. (És hé, ezek “minta” SQL interjúkérdések, de erősen a valóságon alapulnak!)
A feladatok előtt – Mire számíthatsz egy SQL technikai szűrésen?
Az SQL technikai szűrést kétféleképpen lehet elvégezni.
Az egyszerűbb, de kevésbé gyakori módszer az, hogy kapsz egy számítógépet, egy adathalmazt és egy feladatot. Miközben Ön megoldja a feladatot, az interjúztatók figyelnek és kérdéseket tesznek fel. Egy kis próbálkozás és tévedés teljesen rendben van, feltéve, hogy ésszerű idő alatt jutsz el a helyes megoldásig.
A másik, nehezebb (és egyébként sokkal gyakoribb) módszer a táblás interjú. Ebben az esetben nem kapsz számítógépet. Meg kell oldanod a feladatot és fel kell vázolnod a kódot egy táblára. Ez azt jelenti, hogy nem kapsz visszajelzést (legalábbis nem számítógépről) arról, hogy logikai vagy szintaktikai hibát vétettél-e a kódodban. Természetesen iteratív gondolkodással (a különböző SQL-problémák egyesével történő feltörésével) továbbra is megoldhatod a feladatokat, de nagyon magabiztosnak kell lenned az SQL-ismereteiddel kapcsolatban.
Egyébként általában menet közben kell megoldanod a feladatokat. Talán 3-5 perc gondolkodási időt kapsz, de ez a maximum, amire számíthatsz. A jó hír az, hogy emiatt viszonylag egyszerűbb feladatokat kapsz. (A nehézségi szintet lásd alább!)
Figyelem: vannak más típusú technológiai szűrővizsgálatok is – például a házi feladat -, ahol bebizonyíthatod, hogy összetettebb kódolási feladatokat is meg tudsz oldani.
Teszteld magad!
Itt van három SQL interjúkérdés, amelyek nagyon közel állnak ahhoz, amit valóban kaptam vagy adtam adatelemzői/tudós állásinterjúkon!
Próbáld meg mindegyiket úgy megoldani, mintha táblabeszélgetések lennének!
A cikk második felében megmutatom a megoldásokat is!
SQL interjúkérdés #1
Tegyük fel, hogy van két SQL táblád: authors
és books
.
A authors
adatállomány több mint 1M sorból áll; itt van az első hat sor:
szerző_név | könyv_név |
szerző_1 | könyv_1 |
szerző_1 | könyv_2 |
szerző_2 | |
szerző_2 | könyv_3 |
szerző_2 | könyv_4 |
szerző_2 | könyv_5 |
szerző_3 | könyv_6 |
… | … |
A books
adathalmaz szintén több mint 1M sorból áll, és itt van az első hat:
könyv_név | eladott_példányok |
könyv_1 | 1000 |
könyv_2 | 1500 |
könyv_3 | 34000 |
book_4 | 29000 |
book_5 | 40000 |
book_6 | 4400 |
… | … |
Készítsen SQL-lekérdezést, amely megmutatja a TOP 3 szerzőt, akik összesen a legtöbb könyvet adták el!
(Megjegyzés: egy nagyon-nagyon hasonló SQL interjúkérdést kaptam egy adattudós pozícióra egy nagyon ismert svéd informatikai cégnél.)
SQL interjúkérdés #2
Egy startupnak dolgozol, amely egy online prezentációs szoftvert készít. Van egy eseménynaplója, amely minden olyan esetet rögzít, amikor egy felhasználó képet illeszt be egy prezentációba. (Egy felhasználó több képet is beszúrhat.) A event_log
SQL tábla így néz ki:
user_id | event_date_time_time |
7494212 | 1535308430 |
7494212 | 1535308433 |
1475185 | 1535308444 |
6946725 | 1535308475 |
6946725 | 1535308476 |
6946725 | 1535308477 |
… | … |
…és több mint egymilliárd sora van.
Megjegyzés: Ha a event_date_time
oszlop formátuma nem tűnik ismerősnek, keressen rá a Google-ban az “epoch timestamp” kifejezésre!
Írjon SQL-lekérdezést, hogy megtudja, hány felhasználó illesztett be 1000-nél több, de 2000-nél kevesebb képet a prezentációjába!
(Megjegyzés: Ezt az interjúkérdést személyesen én készítettem és használtam az adatelemzők tesztelésére, amikor szabadúszóként dolgoztam, és az ügyfeleimnek segítségre volt szükségük a felvételi folyamat során.)
SQL interjúkérdés #3
Két SQL táblával rendelkezik! Az elsőnek a neve employees
, és tartalmazza egy vállalat alkalmazottainak nevét, az egyedi alkalmazotti azonosítókat és az osztályok nevét. Minta:
osztály_név | alkalmazott_id | alkalmazott_név |
értékesítés | 123 | John Doe |
Sales | 211 | Jane Smith |
HR | 556 | Billy Bob |
Sales | 711 | Robert Hayek |
Marketing | 235 | Edward Jorgson |
Marketing | 236 | Christine Packard |
… | … | … |
A második neve salaries
. Ugyanazokat a dolgozói neveket és ugyanazokat a dolgozói azonosítókat tartalmazza – és az egyes dolgozók fizetését. Minta:
bér | alkalmazott_id | alkalmazott_név |
500 | 123 | John Doe |
600 | 211 | Jane Smith |
1000 | 556 | Billy Bob |
400 | 711 | Robert Hayek |
1200 | 235 | Edward Jorgson |
200 | 236 | Christine Packard |
… | … | … |
A vállalatnak 546 alkalmazottja van, így mindkét táblázatban 546 sor található.
Nyomtasson ki minden olyan részleget, ahol az egy alkalmazottra jutó átlagfizetés 500 dollárnál alacsonyabb!
(Megjegyzés: Ezt a tesztkérdést egy valós SQL interjúkérdés alapján készítettem, amelyet egy barátomtól hallottam, aki az egyik legnagyobb közösségi média cégnél jelentkezett (a név ‘F’-el kezdődik.’ :))
A #1-es SQL interjúkérdés megoldása
A megoldás kódja:
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;
És itt egy rövid magyarázat:
1. Először is el kell indítani a JOIN
. Én a két táblát a:
SELECT *FROM authorsJOIN booksON books.book_name = authors.book_name;
2. Ezután egy SUM()
függvényt használtam egy GROUP BY
záradékkal. Ez azt jelenti, hogy a SELECT
utasításban a *
helyett a author_name
és sold_copies
oszlopokat kellett használnom. (Nem kötelező megadni, hogy melyik táblázatból választjuk ki az oszlopokat, de érdemes. Ezért használtam a authors.author_name
és books.sold_copies
oszlopokat.)
3. Végül ORDER
az eredményeket DESC
végső sorrendbe állítottam. (Csak a kényelem kedvéért a sum
oszlopot is átneveztem sold_sum
-ra a AS sold_sum
módszerrel a SELECT
utasításban.)
A 2. SQL interjúkérdés megoldása
Az SQL lekérdezés:
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;
A feladatban az a trükk, hogy a COUNT()
függvényt kétszer kellett használni: először az egy felhasználóra eső képek számát, majd a (megadott feltételnek megfelelő) felhasználók számát kellett megszámolni. Ennek legegyszerűbb módja, ha alkérdést használsz.
- A belső lekérdezést írd meg először! Futtasson egy egyszerű
COUNT()
függvényt egyGROUP BY
záradékkal aevent_log
táblán. - GYőződjön meg róla, hogy létrehoz egy aliast az alkérdéshez (
AS image_per_user
). Ez egy szintaxis követelmény az SQL-ben. - Egy külső lekérdezésben alkalmazzon egy
WHERE
szűrőt és egyCOUNT()
függvényt az alkérdés eredményére.
A #3. SQL interjúkérdés megoldása
Megoldás:
SELECT department_name, AVG(salaries.salary) AS avg_salariesFROM employeesJOIN salariesON employees.employee_id = salaries.employee_idGROUP BY department_nameHAVING AVG(salaries.salary) < 500;
Megjegyzés: Ezt a feladatot megoldhatja alkérdéssel is – de interjúhelyzetben a bizottságnak a fenti megoldás jobban fog tetszeni.
Rövid magyarázat:
1. Először JOIN a két táblát:
SELECT *FROM employeesJOIN salariesON employees.employee_id = salaries.employee_id
Vigyázz! A employee_id
oszlopot használja – nem a employee_name
oszlopot. (Egy vállalatnál mindig lehet két John Does, de az alkalmazott azonosítója egyedi!)
2. Ezután használjon egy AVG()
függvényt egy GROUP BY
záradékkal – és helyettesítse a *
-t a megfelelő oszlopokkal. (Csakúgy, mint az első feladatban.)
3. És az utolsó lépésként használjunk egy HAVING
záradékot a AVG()
függvény eredménye alapján történő szűréshez. (Ne feledje! A WHERE
itt nem jó, mert azt a AVG()
függvény előtt kezdeményezné.)
Vigyázz: a HAVING
sorban nem hivatkozhatsz az aliasra – újra magát a teljes függvényt kell használnod!
Felkészülj az SQL tech szűrésekre gyakorlással!
Ha ezeket a kérdéseket sikerült megfelelően megoldanod, akkor valószínűleg készen állsz egy junior vagy akár egy középszintű adatelemző SQL technikai szűrésre.
Ha nem, akkor hadd ajánljam figyelmedbe új online tanfolyamomat: SQL for Aspiring Data Scientists (7 napos online kurzus) – ahol mindössze 7 nap alatt fejlesztheted (vagy felfrissítheted) SQL-ismereteidet. Ha befejezted a tanfolyamot, csak térj vissza erre a cikkre, és garantálom, hogy meg fogod tudni oldani ezeket a kérdéseket!
SQL for Aspiring Data Scientists (7 napos online tanfolyam)
És ha még csak most kezdesz bele az SQL-be, kezdd az SQL For Data Analysis című sorozatommal a blogon!
Következtetés
Az SQL interjúkérdések nehéz része az, hogy elvontak. A feladatok azt mondják, hogy “képzeld el az adathalmazokat”, és csak néhány sort mutatnak belőlük. Amikor ilyen feladatot kapsz, sokat segít, ha már láttál hasonló adathalmazokat és oldottál meg hasonló feladatokat korábban. Remélem, hogy a cikkben szereplő feladatok megoldása növeli az önbizalmadat!