Viimeisten 6 vuoden aikana olen ollut mukana monissa työhaastatteluissa – pöydän molemmin puolin. Prosessin hauskin, mutta myös pelätyin osa on tekninen seulonta. Tässä artikkelissa esittelen kolme SQL-testitehtävää, jotka ovat kokemukseni mukaan varsin tyypillisiä data-analyytikon työhaastatteluissa. (Ja hei, nämä ovat ”esimerkkejä” SQL-haastattelukysymyksistä, mutta ne pohjautuvat vahvasti todellisuuteen!)
Ennen tehtäviä – Mitä SQL:n teknisessä seulonnassa on odotettavissa?
SQL-tekninen seulonta voidaan tehdä kahdella tavallisella tavalla.
Yksinkertaisempi, mutta harvinaisempi tapa on se, että saat tietokoneen, tietokokonaisuuden ja tehtävän. Samalla kun ratkaiset tehtävää, haastattelijat tarkkailevat ja esittävät kysymyksiä. Pieni kokeileminen ja erehtyminen on täysin sallittua, kunhan pääset oikeaan ratkaisuun kohtuullisessa ajassa.
Toinen, vaikeampi (ja muuten paljon yleisempi) tapa on valkotauluhaastattelu. Tässä tapauksessa et saa tietokonetta. Sinun täytyy ratkaista tehtävä ja hahmotella koodi valkotaululle. Tämä tarkoittaa, että et saa palautetta (ainakaan tietokoneelta) siitä, teitkö koodissasi loogisen vai syntaksivirheen. Voit tietysti silti ratkaista tehtävät ajattelemalla iteratiivisesti (ratkaisemalla eri SQL-ongelmat yksi kerrallaan), mutta sinun on oltava hyvin varma SQL-taidoistasi.
Lisäksi sinun on yleensä ratkaistava tehtävät lennossa. Ehkä saat 3-5 minuuttia ajatteluaikaa, mutta se on maksimi mitä voit odottaa. Hyvä uutinen on, että sen takia saat suhteellisen yksinkertaisempia tehtäviä. (Katso vaikeustaso alta!)
Huomaa: on olemassa muitakin tekniikan seulontatyyppejä – kuten kotitehtävä – joissa voit todistaa, että osaat ratkaista myös monimutkaisempia koodaushaasteita.
Testaa itsesi!
Tässä on kolme SQL-haastattelukysymystä, jotka ovat todella lähellä niitä, joita todella sain tai annoin data-analyytikon/tiedemiehen työhaastatteluissa!
Yritä ratkaista kaikki kysymykset kuin valkotauluhaastatteluissa!
Artikkelin jälkimmäisessä puoliskossa näytän myös ratkaisut!
SQL-haastattelukysymys nro 1
Tulkitkaamme, että sinulla on kaksi SQL-taulua: authors
ja books
.
Tietokannassa authors
on yli 1M riviä; tässä on kuusi ensimmäistä riviä:
kirjailijan nimi | kirjan nimi | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
kirjailija_1 | kirja_1 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
kirjailija_1 | kirjailija_1 | kirja_1 |
kirjan nimi |
kirja_3 | |
kirja_2 | kirja_4 |
kirja_2 | kirja_5 |
kirja_3 | kirja_6 |
… | … |
Datasetissa books
on myös yli 1M riviä, ja tässä on kuusi ensimmäistä:
kirjan_nimi | myydyt_kappaleet |
kirja_1 | 1000 |
kirja_2 | 1500 |
kirja_3 | 34000 |
book_4 | 29000 |
book_5 | 40000 |
book_6 | 4400 |
… | … |
Luo SQL-kysely, joka näyttää TOP 3 kirjailijaa, jotka ovat myyneet yhteensä eniten kirjoja!
(Huomautus: sain hyvin, hyvin samanlaisen SQL-haastattelukysymyksen hyvin tunnetun ruotsalaisen IT-yrityksen datatieteilijän tehtävään.)
SQL-haastattelukysymys nro 2
Työskentelet startup-yrityksessä, joka valmistaa online-esitysohjelmistoa. Sinulla on tapahtumaloki, joka tallentaa joka kerta, kun käyttäjä lisää kuvan esitykseen. (Yksi käyttäjä voi lisätä useita kuvia.) event_log
SQL-taulukko näyttää tältä:
user_id | event_date_time |
7494212 | 1535308430 |
7494212 | 1535308433 |
1475185 | … |
…ja siinä on yli miljardi riviä.
Huomautus: Jos event_date_time
-sarakkeen muoto ei näytä tutulta, googlaa ”epoch timestamp”!
Kirjoita SQL-kysely, jolla saat selville, kuinka moni käyttäjä lisäsi esityksiinsä yli 1000 mutta alle 2000 kuvaa!
(Huomautus: Olen itse luonut ja käyttänyt tätä haastattelukysymystä testatakseni data-analyytikkoja, kun olin freelancerina ja asiakkaani tarvitsivat apua rekrytointiprosessissaan.)
SQL-haastattelukysymys nro 3
Sinulla on kaksi SQL-taulukkoa! Ensimmäisen nimi on employees
ja se sisältää yrityksen työntekijöiden nimet, yksilölliset työntekijätunnukset ja osastojen nimet. Esimerkki:
osaston_nimi | työntekijän_id | työntekijän_nimi |
myynti | 123 | John Doe |
Myynti | 211 | Jane Smith |
HR | 556 | Billy Bob |
Myynti | 711 | Robert Hayek |
Markkinointi | 235 | Edward Jorgson |
Markkinointi | 236 | Christine Packard |
… | … | … |
Toisen nimi on salaries
. Se sisältää samat työntekijöiden nimet ja samat työntekijöiden tunnukset – ja kunkin työntekijän palkat. Esimerkki:
palkka | työntekijän_id | työntekijän_nimi |
500 | 123 | John Doe |
600 | 211 | Jane Smith |
1000 | 556 | Billy Bob |
400 | 711 | Robert Hayek |
1200 | 235 | Edward Jorgson |
200 | 236 | Christine Packard |
… | … | … |
Yrityksessä on 546 työntekijää, joten molemmissa taulukoissa on 546 riviä.
Tulosta jokainen osasto, jossa työntekijäkohtainen keskipalkka on alle 500 dollaria!
(Huomautus: Loin tämän testikysymyksen todellisen SQL-haastattelukysymyksen perusteella, jonka kuulin ystävältäni, joka haki erääseen suurimpaan sosiaalisen median yritykseen (nimi alkaa F.’ :))
Ratkaisu SQL-haastattelukysymykseen #1
Ratkaisun koodi on:
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;
Ja tässä on lyhyt selitys:
1. Ensin on käynnistettävä JOIN
. Yhdistin kaksi taulukkoa käyttämällä:
SELECT *FROM authorsJOIN booksON books.book_name = authors.book_name;
2. Sen jälkeen käytin SUM()
-funktiota, jossa on GROUP BY
-lauseke. Tämä tarkoittaa, että SELECT
-lauseessa minun piti korvata *
sarakkeilla author_name
ja sold_copies
. (Ei ole pakollista ilmoittaa, mistä taulukosta sarakkeet valitaan, mutta se kannattaa tehdä. Siksi käytin authors.author_name
ja books.sold_copies
.)
3. Lopulta ORDER
laitoin tulokset DESC
loppujärjestykseen. (Yksinkertaisuuden vuoksi nimesin myös sum
-sarakkeen uudelleen sold_sum
:ksi käyttäen AS sold_sum
-menetelmää SELECT
-lauseessa.)
Ratkaisu SQL-haastattelukysymykseen nro 2
SQL-kysely on:
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;
Tehtävän juju piilee siinä, että jouduit käyttämään COUNT()
-funktiota kahteen otteeseen: Ensin piti laskea kuvien määrä käyttäjää kohden ja sitten niiden käyttäjien määrä (jotka täyttävät annetun ehdon). Helpoin tapa tehdä tämä on käyttää alakyselyä.
- Kirjoita ensin sisempi kysely! Suorita yksinkertainen
COUNT()
-funktioGROUP BY
-lausekkeellaevent_log
-taulukossa. - Varmista, että luot aliaksen alakyselylle (
AS image_per_user
). Se on SQL:n syntaksivaatimus. - Sovella lopulta ulommassa kyselyssä
WHERE
-suodatinta jaCOUNT()
-funktiota alakyselyn tulokseen.
Ratkaisu SQL-haastattelukysymykseen #3
Ratkaisu:
SELECT department_name, AVG(salaries.salary) AS avg_salariesFROM employeesJOIN salariesON employees.employee_id = salaries.employee_idGROUP BY department_nameHAVING AVG(salaries.salary) < 500;
Huomautus: Voit ratkaista tämän tehtävän myös alikyselyllä – mutta haastattelutilanteessa lautakunta pitää yllä olevasta ratkaisusta enemmän.
Lyhyt selitys:
1. Yhdistä ensin kaksi taulukkoa:
SELECT *FROM employeesJOIN salariesON employees.employee_id = salaries.employee_id
Varo! Käytä employee_id
-saraketta – ei employee_name
. (Yrityksessä voi aina olla kaksi John Does, mutta työntekijän id on yksilöllinen!)
2. Käytä sitten AVG()
-funktiota GROUP BY
-lausekkeella – ja korvaa *
asianmukaisilla sarakkeilla. (Aivan kuten ensimmäisessä tehtävässä.)
3. Ja viimeisessä vaiheessa käytetään HAVING
-lauseketta AVG()
-funktion tuloksen suodattamiseen. (Muista: WHERE
ei ole tässä hyvä, koska se käynnistettäisiin ennen AVG()
-funktiota.)
Varo: HAVING
-rivillä et voi viitata aliasiin – sinun on käytettävä koko funktiota itse uudelleen!
Valmistaudu SQL-teknisiin seulontoihin harjoittelemalla!
Jos onnistuit ratkaisemaan kaikki nämä kysymykset oikein, olet luultavasti valmis juniorin tai jopa keskitason data-analyytikon SQL-tekniseen seulontaan.
Jos et, suosittelen uutta verkkokurssiani: SQL for Aspiring Data Scientists (7 päivän verkkokurssi) – jossa voit parantaa (tai harjata) SQL-taitojasi vain 7 päivässä. Kun olet lopettanut kurssin, palaa vain tähän artikkeliin ja takaan, että osaat ratkaista nämä kysymykset!
SQL for Aspiring Data Scientists (7 päivän verkkokurssi)
Ja jos olet vasta aloittamassa SQL-taitojen opettelua, aloita blogissani olevasta SQL For Data Analysis -sarjastani!
Johtopäätökset
Nämä SQL-haastattelukysymysten vaikeinta antia on se, että kysymykset ovat abstrakteja. Tehtävissä kehotetaan ”kuvittelemaan tietokokonaisuuksia” ja näyttämään niistä vain muutama rivi. Kun saat tällaisen tehtävän, auttaa paljon, jos olet nähnyt samanlaisia tietokokonaisuuksia ja ratkaissut samanlaisia ongelmia aiemmin. Toivottavasti tämän artikkelin tehtävien ratkaiseminen lisää itseluottamustasi!