SQL-intervjuu küsimused kogenud professionaalidele

Allikasõlm: 1586233

SQL-intervjuu küsimused kogenud professionaalidele
 

Sissejuhatus

 
Kui olete kogenud andmeteadlane, kes otsib tööd, poleks te saanud paremat aega valida. Praeguse seisuga otsivad paljud väljakujunenud organisatsioonid andmeteadlasi, kes tunnevad oma tööd seest ja väljast. Suur nõudlus ei tähenda aga, et saaks või peaks läbi hüppama ja kõrgematele ametikohtadele kandideerima ilma teatud oskusteta. Kogenud andmeteadlaste palkamisel ootavad ettevõtted, et nad töötaksid kõige raskemate ülesannetega. Need töötajad peaksid hästi aru saama isegi kõige ebaselgematest funktsioonidest, et nad saaksid neid vajadusel kasutada.

Ei tohiks olla üllatav, et kõrgematele ametikohtadele intervjueerides küsitakse kogenud andmeteadlastelt palju raskemaid küsimusi. Sageli saavad andmeteadlased paari aasta jooksul ühe tööga töötades väga osavaks teatud korduvate ülesannete täitmisel. Professionaalide jaoks on oluline mõista, et SQL ei lõpe ega lõpe nende olemasolevate teadmistega. SQL-i täiustatud kontseptsioonide osas võib nende teadmistes siiski olla lünki. Seega ei tee halba, kui küsite oma andmeteadlase intervjuul edu saavutamiseks abi. 

SQL on andmebaaside haldamise peamine keel, seega on SQL-i toimingute tegemine andmeteadlaste töö keskmes. Enamik andmeteadlaste intervjuusid korraldatakse selleks, et teha kindlaks kandidaadi SQL-alased teadmised. 

Igapäevatöö ei pruugi hõlmata keeruliste päringute kirjutamist, kuid peate näitama, et kui selliseid oskusi on vaja, olete inimene, kes suudab seda teha. Seega ei tohiks olla üllatav, et intervjueerijad küsivad erinevaid küsimusi SQL-intervjuu küsimused kandidaadi SQL-i keeleoskuse testimiseks.

Selles artiklis soovisime kokku võtta mõned keerulised küsimused ja kontseptsioonid, mida küsiti kogenud spetsialistidega intervjuudel. Isegi kui olete oma SQL-teadmistes kindel, ei tee paha märksõnade skannimine ja veendumine, et kõik on kaetud.

Kogenud spetsialistide miinimumkontseptsioonid

JUHTUM / MILLAL

 
CASE-i kontseptsiooni (ja sellega kaasneva When-lause) põhjalik mõistmine on SQL-i täieliku valdamise saavutamiseks hädavajalik. Juhtumi avaldus võimaldab meil kontrollida teatud tingimusi ja tagastada väärtuse selle põhjal, kas need tingimused on tõesed või väärad. Koos klauslitega, nagu WHERE ja ORDER BY, võimaldab CASE meil tuua oma SQL-päringutesse loogika, tingimused ja järjestuse.

CASE-lausete väärtus ei piirdu meie päringutes lihtsa tingimusliku loogika pakkumisega. Kogenud andmeteadlastel peaks olema CASE-i avaldusest ja selle kasutusviisidest rohkem kui pinnapealne arusaam. Intervjueerijad esitavad teile tõenäoliselt küsimusi erinevat tüüpi CASE-väljendite ja nende kirjutamise kohta. 

Kogenud kandidaadid peaksid olema valmis vastama teoreetilistele küsimustele, näiteks selgitama väärtustatud ja otsitud CASE-i väidete erinevusi, kuidas need töötavad ja kuidas neid kirjutada. See nõuab nende süntaksi ja levinud tavade tugevat mõistmist. Ütlematagi selge, et see hõlmab ka ELSE-klausli nõuetekohast kasutamist.

Kogenud andmeteadlastelt oodatakse, kuidas kasutada CASE-i ka koondfunktsioonidega. Samuti võidakse teil paluda kirjutada stenogrammi CASE-lause, mis on vähem korduv ja hõlpsamini mõistetav. Peaksite suutma arukalt rääkida hoiatustest ja võimalikest riskidest, mis kaasnevad stenogrammi CASE-lausete kasutamisega.

Üldiselt peab kogenud andmeteadlane suutma kasutada CASE-d tõhusamate päringute kirjutamiseks. Lõppude lõpuks on CASE-lause kogu eesmärk vältida andmete koondamiseks liiga paljude üksikute päringute kirjutamist.

Siin on näide küsimusest, mida saab lahendada lausete CASE / WHEN abil: https://platform.stratascratch.com/coding/9634-host-response-rates-with-cleaning-fees?python= 

See on keeruline küsimus, mida küsitakse Airbnb intervjuudes, kus kandidaadid peavad leidma hosti keskmise vastuste määra, sihtnumbri ja sellele vastava koristustasu.

Sel juhul kasutatakse lauset CASE/ WHEN, et lisaks sihtnumbrile vormindada tulemus arvuna ja esitada see protsendiväärtusena.

SQL Liita

 
SQL Joinsi teadmistes on lihtne tunda end kindlalt, kuid mida rohkem seda teemat uurite, seda rohkem avastate, et te ei tea. Küsitlejad küsivad sageli küsitlege küsimusi SQL Joinsi täiustatud aspektide kohta mis sageli tähelepanuta jäetakse. Seega on oluline sellesse kontseptsiooni süveneda ja seda põhjalikult omandada.
 
Lisaks põhimõistetele võivad intervjueerijad küsida, mis on ristliited, ja saada praktilisi küsimusi lahendades teada teie teadmiste sügavust. Peaksite teadma kõiki erinevaid ühenduste tüüpe, sealhulgas keerukamaid tüüpe, nagu räsiühendused või liitliited. Samuti võidakse teil paluda selgitada, mis on loomulikud liited ja millal on need kõige kasulikumad. Mõnikord peate selgitama erinevusi loomulike ja sisemiste ühenduste vahel.
 
Soovitud tulemuste saavutamiseks peaks teil üldiselt olema põhjalik kogemus ja meisterlikkus liitmike kasutamises koos teiste väidetega. Näiteks peaksite teadma, kuidas kasutada klauslit WHERE, et kasutada ristliitumist nii, nagu see oleks sisemine liitumine. Samuti eeldatakse, et tead, kuidas liitude abil luua uusi tabeleid ilma serverile liigset survet avaldamata. Või kuidas kasutada väliseid liitumisi andmebaasi päringute tegemisel puuduvate väärtuste tuvastamiseks ja täitmiseks. Või väliste ühenduste sisemised tööd, näiteks asjaolu, et nende järjestuse ümberkorraldamine võib väljundit muuta. 

Siin on näide küsimusest, mis hõlmab sisemise ühisavalduse kirjutamist

See on üsna keeruline küsimus, kus kandidaatidel palutakse kuvada tellimuse suurus protsentides kogukuludest.
 
 

Täiustatud kontseptsioon N1: kuupäeva ja kellaaja manipuleerimine

 
SQL-intervjuu küsimused kogenud professionaalidele
 

On tavaline, et andmebaasid sisaldavad kuupäevi ja kellaaegu, nii et igal kogenud andmeteadlasel peaksid olema nendega töötamise kohta sügavad teadmised. Seda tüüpi andmed võimaldavad meil jälgida sündmuste toimumise järjekorda, sageduse muutusi, arvutada intervalle ja saada muid olulisi teadmisi. Paljudel juhtudel nõuab nende toimingute sooritamine SQL-is kuupäeva ja kellaaja manipuleerimise täielikku valdamist. Nii et selliste oskustega spetsialistidel on konkureerivate kandidaatide ees eelis. Kui te pole oma oskustes 100% kindel, vaadake allpool kirjeldatud mõisteid ja vaadake, kui paljud neist tunduvad tuttavad.

Kuna andmete vormindamiseks SQL-is on palju erinevaid (kuid kehtivaid) lähenemisviise, peaksid suurepärased kodeerijad olema nendega vähemalt tuttavad. Vestluste käigus ootavad värbamisjuhid teadmisi põhiandmete vormindamise kontseptsioonidest ja oskust arukalt rääkida ülesande jaoks õige funktsiooni valikust. See hõlmab teadmisi olulisest funktsioonist FORMAT() ja sellega seotud süntaksist, et seda funktsiooni täielikult ära kasutada. Samuti eeldatakse teiste põhifunktsioonide, näiteks NOW() tundmist. Samuti poleks juhuslik, kui kogenud spetsialistidelt küsitaks selliste põhimõistete kohta nagu aegridade andmed ja nende eesmärk.

Samuti on oluline arvestada taotletava töö kontekstiga. Tehisintellekti või asjade interneti ettevõte oleks rohkem mures anduritelt kogutud andmete jälgimise pärast, samas kui aktsiakaubandusrakendus võib nõuda hinnakõikumiste jälgimist päeva, nädala või kuu jooksul.

Mõnel juhul võivad tööandjad küsida SQL-i täpsemate kuupäeva/kellaaja funktsioonide kohta, nagu CAST(), EXTRACT() või DATE_TRUNC(). Need funktsioonid võivad olla hindamatud, kui töötate suure hulga kuupäevi sisaldavate andmetega. Kogenud andmeteadlane peaks teadma iga funktsiooni eesmärki ja selle rakendusi. Ideaalse stsenaariumi korral peaks tal olema nende kasutamise kogemus.

SQL-i kõige keerulisem kuupäeva ja kellaaja manipuleerimine hõlmab põhi- ja täiustatud funktsioonide kombinatsiooni. Seega on vaja neid kõiki teada, alustades elementaarsematest FORMAT(), NOW(), CURRENT_DATE ja CURRENT_TIME ning sealhulgas eespool mainitud täpsematest funktsioonidest. Kogenud andmeteadlasena peaksite teadma ka seda, mida INTERVAL teeb ja millal seda kasutada.

Siin on näide Airbnb intervjuudes esitatud küsimusest, kus kandidaadid peavad Airbnb kasvu jälgimiseks kasutama olemasolevaid andmeid.
 
 

Eeldus:

 
Selles küsimuses palutakse kandidaatidel jälgida Airbnb kasvu, lähtudes igal aastal registreerunud võõrustajate arvu muutustest. Teisisõnu kasutame iga aasta kasvu näitajana uute registreeritud hostide arvu. Leiame kasvutempo, arvutades eelmise ja jooksva aasta hostide arvu erinevuse ning jagades selle arvu eelmisel aastal registreeritud hostide arvuga. Seejärel leiame protsendiväärtuse, korrutades tulemuse 100-ga.

Väljundtabelis peaksid olema veerud ja vastavad andmed hostide arvu kohta jooksval aastal, eelmisel aastal ja aasta-aastalt kasvuprotsent. Protsent tuleb ümardada lähima täisarvuni ja järjestada read kasvavas järjekorras olenevalt aastast.
 
 

Lahendus:

 
Sellele küsimusele vastamiseks peab kandidaat töötama tabeliga „airbnb_search_details”, mis sisaldab palju veerge. Vajalik veerg on märgistatud "host_since", mis tähistab aastat, kuud ja päeva, mil host registreerus esmakordselt veebisaidi kasutajaks. Selle harjutuse puhul ei oma kuu ja päev tähtsust, seega peame esimese asjana väärtusest välja võtma aasta. Seejärel peame looma vaate, mis sisaldab eraldi veerge jooksva aasta, eelmise aasta ja selle aasta hostide koguarvu kohta. 

Select       extract(year FROM host_since::DATE) FROM airbnb_search_details WHERE host_since IS NOT NULL

Seni oleme teinud kahte asja:

  1. Oleme veendunud, et kaasatakse ainult need read, kus veerg host_since pole tühi.
  2. Oleme andmetest eraldanud aasta ja andnud selle väärtuseks DATE.
Select       extract(year FROM host_since::DATE)       count(id) as current_year_host FROM airbnb_search_details WHERE host_since IS NOT NULL GROUP BY extract(year FROM host_since::DATE) ORDER BY year asc

Seejärel jätkame ID-de loendamist ja seadistame iga aasta jaoks klausli GROUP BY. Ja kuvage see kasvavas järjekorras. 

See peaks andma meile kahe veeruga tabeli: aasta ja sellel aastal registreeritud hostide arv. Meil ei ole ikka veel täielikku pilti, mis on küsimuse lahendamiseks vajalik, kuid see on samm õiges suunas. Samuti vajame eraldi veerge eelmisel aastal registreerunud hostide jaoks. Siin tuleb sisse funktsioon LAG().

SELECT       Year,       current_year_host,       LAG(current_year_host, 1) OVER (ORDER BY year) as prev_year_host Select       extract(year FROM host_since::DATE)       count(id) as current_year_host FROM airbnb_search_details WHERE host_since IS NOT NULL GROUP BY extract(year FROM host_since::DATE) ORDER BY year asc

Siia lisasime kolmanda veeru, mis kannab nimetust "prev_year_host" ja selle väärtused pärinevad veerust "praegune_aasta_host", välja arvatud ühe rea viivitus. See võib välja näha järgmiselt.

SQL-intervjuu küsimused kogenud professionaalidele
 

Tabeli sellisel paigutusel on lõpliku kasvumäära arvutamine väga mugav. Meil on võrrandis iga väärtuse jaoks eraldi veerg. Lõppkokkuvõttes peaks meie kood välja nägema umbes selline:

SELECT year,       current_year_host,       prev_year_host,       round(((current_year_host - prev_year_host)/(cast(prev_year_host AS numeric)))*100) estimated_growth FROM   (SELECT year,           current_year_host,           LAG(current_year_host, 1) OVER (ORDER BY year) AS prev_year_host   FROM     (SELECT extract(year                     FROM host_since::date) AS year,             count(id) current_year_host       FROM airbnb_search_details       WHERE host_since IS NOT NULL       GROUP BY extract(year                       FROM host_since::date)       ORDER BY year) t1) t2

Siin lisame veel ühe päringu ja veeru, kus arvutame kasvumäära. Peame esialgse tulemuse korrutama 100-ga ja ümardama selle ülesande nõuete täitmiseks. 

See on selle ülesande lahendus. On selge, et kuupäeva ja kellaaja manipuleerimise funktsioonid olid ülesande täitmiseks hädavajalikud. 
 
 

Täiustatud kontseptsioon N2: aknafunktsioonid ja vaheseinad

 
SQL-intervjuu küsimused kogenud professionaalidele
 

SQL-i akna funktsioonid on keerukate, kuid tõhusate SQL-päringute kirjutamise üks olulisemaid kontseptsioone. Kogenud spetsialistidelt oodatakse sügavaid praktilisi ja teoreetilisi teadmisi akende funktsioonidest. See hõlmab üleklausli teadmist ja selle kasutamise valdamist. Intervjueerijad võivad küsida, kuidas saab OVER-klausel muuta koondfunktsioonid aknafunktsioonideks. Samuti võidakse teilt küsida kolme koondfunktsiooni kohta, mida saab kasutada aknafunktsioonidena. Kogenud andmeteadlased peaksid olema teadlikud ka muudest, mitte-koondakna funktsioonidest.

Akna funktsioonide parimaks kasutamiseks tuleb teada ka, mis on klausel PARTITION BY ja kuidas seda kasutada. Teil võidakse paluda seda selgitada ja tuua näiteid mõne kasutusjuhtumi kohta. Mõnikord peate korraldama ridu sektsioonides, kasutades klauslit ORDER_BY.

Eelis on kandidaadid, kes suudavad näidata iga üksiku aknafunktsiooni (nt ROW_NUMBER() põhjalikke teadmisi. Ütlematagi selge, et teoreetilistest teadmistest üksi ei piisa – professionaalidel peaks olema ka nende praktikas kasutamise kogemus, vaheseintega või ilma. Näiteks peaks kogenud spetsialist suutma selgitada RANK() ja DENSE_RANK() erinevusi. Ideaalne kandidaat peaks teadma mõnda kõige arenenumat mõistet (nt raamid partitsioonides) ja suutma neid selgelt selgitada.

Suurepärased kandidaadid peaksid selgitama ka funktsiooni NTH_VALUE() kasutamist. Ei teeks paha mainida selle funktsiooni alternatiive, nagu funktsioonid FIRST_VALUE() ja LAST_VALUE(). Ettevõtetele meeldib sageli mõõta kvartiile, kvantile ja protsentiile üldiselt. Selle toimingu tegemiseks peavad andmeteadlased teadma, kuidas kasutada ka aknafunktsiooni NTILE ().

SQL-is on ülesandele lähenemiseks tavaliselt palju võimalusi. Siiski on aknafunktsioonid lihtsaim viis tavaliste, kuid keerukate toimingute tegemiseks. Hea näide sellisest aknafunktsioonist on LAG() või LEAD(), seega peaksid ka nendega tuttavad olema. Näiteks vaatame näidet eelmisest lahendusest keerulisele Airbnb intervjuu küsimusele:

Eelmise aasta hostide arvu kuvamiseks kasutasime funktsiooni LAG() koos lausega OVER. Seda oleks saanud teha mitmel muul viisil, kuid aknafunktsioonid võimaldasid meil saada soovitud tulemuse vaid ühe SQL-koodi reaga:

LAG(praegune_aasta_host, 1) OVER (ORDER BY) kui eelmine_aasta_host

Paljud ettevõtted peavad arvutama kasvu teatud aja jooksul. Funktsioon LAG() võib olla selliste ülesannete täitmisel hindamatu väärtusega.
 
 

Täiustatud kontseptsioon N3: igakuine kasv

 
SQL-intervjuu küsimused kogenud professionaalidele
 

Paljud organisatsioonid kasutavad oma tulemuslikkuse mõõtmiseks andmeanalüüsi. See võib hõlmata turunduskampaaniate tõhususe või konkreetse investeeringu investeeringutasuvuse mõõtmist. Sellise analüüsi tegemine eeldab SQL-i (nt kuupäeva, kellaaja ja akna funktsioonide) põhjalikke teadmisi.

Andmeteadlased peavad ka tõestama oma oskusi andmete vormindamisel ja kuvamisel protsentides või mis tahes muul kujul. Üldjuhul tuleb praktiliste küsimuste lahendamiseks, kus peate arvutama igakuise kasvu, kasutama mitme oskuste komplekti kombinatsiooni. Mõned nõutavad mõisted on täiustatud (aknafunktsioonid, kuupäeva ja kellaaja manipuleerimine), teised aga lihtsad (koondfunktsioonid ja tavalised SQL-laused).

Vaatame ühte näidet, mille küsitlejad Amazonis esitasid.

Eeldus:

 
Selle küsimuse puhul peame töötama ostude tabeliga ja arvutama igakuise tulude kasvu või languse. Lõpptulemus tuleb vormindada kindlal viisil (AAAA-KK vorming) ja protsendid ümardada teise lähima kümnendkohani. 

Lahendus:

 
Sellise ülesande kallal töötades peate kõigepealt tabelist aru saama. Samuti peaksite tuvastama veerud, millega peate küsimusele vastamiseks töötama. Ja milline teie väljund välja näeb.

Meie näites on andmeväärtustel objektitüüp, seega peame kasutama funktsiooni CAST(), et need kuupäevatüüpideks teisendada.

SELECT   to_char(cast(created_at as date), 'YYYY-MM') FROM sf_transactions

Küsimus määrab ka kuupäevade vormingu, nii et saame kasutada SQL-is funktsiooni TO_CHAR() kuupäeva selles vormingus väljastamiseks.

Kasvu arvutamiseks peaksime valima ka koondfunktsioonid Created_at ja SUM(), et saada selle kuupäeva müügi kogumaht. 

SELECT   to_char(cast(created_at as date), 'YYYY-MM'),   created_at,   sum(value) FROM sf_transactions

Siinkohal peame uuesti kasutama aknafunktsioone. Täpsemalt, me kasutame funktsiooni LAG(), et pääseda juurde eelmise kuu mahule ja kuvada see eraldi veeruna. Selleks vajame ka OVER-klauslit.

SELECT   to_char(cast(created_at as date), 'YYYY-MM') AS year_month,   created_at,   sum(value)   lag(sum(value), 1) OVER (ORDER BY created_at::date) FROM sf_transactions GROUP BY created_at

Seni kirjutatud koodi põhjal näeb meie tabel välja umbes selline:

SQL-intervjuu küsimused kogenud professionaalidele
 

Siin on summa veerus kuupäevad ja vastavad koguväärtused ning viivituse veerus viimase kuupäeva väärtused. Nüüd saame lisada väärtused valemisse ja kuvada kasvumäära eraldi veerus.

Samuti peaksime eemaldama tarbetu veeru Created_at ja muutma klauslid GROUP BY ja ORDER BY väärtuseks year_month.

SELECT   to_char(cast(created_at as date), 'YYYY-MM') AS year_month,   sum(value),   lag(sum(value), 1) OVER (ORDER BY to_char(cast(created_at as date)) FROM sf_transactions GROUP BY year_month

Kui oleme koodi käivitanud, peaks meie tabel sisaldama ainult neid veerge, mis on meie arvutuste jaoks olulised.

SQL-intervjuu küsimused kogenud professionaalidele
 

Nüüd saame lõpuks lahenduseni jõuda. Lõplik kood näeks välja järgmine:

SELECT to_char(created_at::date, 'YYYY-MM') AS year_month,       round(((sum(value) - lag(sum(value), 1) OVER w) / (lag(sum(value), 1) OVER w)) * 100, 2) AS revenue_diff_pct FROM sf_transactions GROUP BY year_month WINDOW w AS (         ORDER BY to_char(created_at::date, 'YYYY-MM')) ORDER BY year_month ASC


 

Selles koodis võtame eelmisest näitest kaks veeru väärtust ja arvutame nendevahelise erinevuse. Pange tähele, et kasutame koodi korduvuse vähendamiseks ka akna varjunimesid.

Seejärel jagame vastavalt algoritmile selle jooksva kuu tuluga ja korrutame protsendiväärtuse saamiseks 100-ga. Lõpuks ümardame protsendiväärtuse kahe kümnendkohani. Jõuame vastuseni, mis rahuldab kõik ülesande nõuded. 

Täiustatud kontseptsioon N4: loobumismäärad

 
Kuigi see on kasvule vastupidine, on ka churn oluline mõõdik. Paljud ettevõtted jälgivad oma loobumismäärasid, eriti kui nende ärimudel on tellimuspõhine. Nii saavad nad jälgida kaotatud tellimuste või kontode arvu ja ennustada selle põhjuseid. Kogenud andmeteadlane peab teadma, milliseid funktsioone, avaldusi ja klausleid kasutada lahutusmäärade arvutamiseks.

Tellimuse andmed on väga privaatsed ja sisaldavad privaatset kasutajateavet. Samuti on andmeteadlastel oluline teada, kuidas selliste andmetega töötada ilma neid paljastamata. Tihtipeale hõlmab churn rate arvutamine tavalisi tabeliavaldisi, mis on suhteliselt uus mõiste. Parimad andmeteadlased peaksid teadma, miks CTE-d on kasulikud ja millal neid kasutada. Töötades vanemate andmebaasidega, kus CTE-d pole saadaval, peaks ideaalne kandidaat siiski tööga hakkama saama.

Siin on näide keerulisest ülesandest. Lyftis intervjueerivad kandidaadid saavad selle ülesande, et arvutada ettevõttes juhtide töölt lahkumise määr.

Selle probleemi lahendamiseks peavad andmeteadlased kasutama case/when-lauseid, aknafunktsioone, nagu LAG(), samuti FROM / WHERE ja muid põhiklausleid. 

Järeldus

 
Aastaid andmeteadlasena töötamine tundub CV-s kindlasti muljetavaldav ja annab teile palju intervjuusid. Kuid kui olete jala ukse vahele saanud, peate siiski näitama teadmisi, et täiendada aastatepikkust kogemust. Isegi kui teil on laialdased kogemused päringute kirjutamine SQL-is, ei tee paha kasutada selliseid ressursse nagu StrataScratch oma teadmisi värskendada.

 
 
Nate Rosidi on andmeteadlane ja tootestrateegias. Ta on ka analüütikat õpetav dotsent ja asutaja StrataScratch, platvorm, mis aitab andmeteadlastel tippettevõtete tõeliste intervjuuküsimustega intervjuudeks valmistuda. Ühendage temaga Twitter: StrataScratch or LinkedIn.

Allikas: https://www.kdnuggets.com/2022/01/sql-interview-questions-experienced-professionals.html

Ajatempel:

Veel alates KDnuggets