SQL interjúkérdések:

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 DESCvé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.

  1. A belső lekérdezést írd meg először! Futtasson egy egyszerű COUNT() függvényt egy GROUP BY záradékkal a event_log táblán.
  2. 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.
  3. Egy külső lekérdezésben alkalmazzon egy WHERE szűrőt és egy COUNT() 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!

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.