SQL-haastattelukysymykset:

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 DESCloppujä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ä.

  1. Kirjoita ensin sisempi kysely! Suorita yksinkertainen COUNT()-funktio GROUP BY-lausekkeella event_log-taulukossa.
  2. Varmista, että luot aliaksen alakyselylle (AS image_per_user). Se on SQL:n syntaksivaatimus.
  3. Sovella lopulta ulommassa kyselyssä WHERE-suodatinta ja COUNT()-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!

Vastaa

Sähköpostiosoitettasi ei julkaista.