Top Fem SQL Window-funktioner, du bør kende til datavidenskabsinterviews

Kildeknude: 1582448

Top Fem SQL Window-funktioner, du bør kende til datavidenskabsinterviews
 

SQL er det universelle sprog i dataverdenen og er den vigtigste færdighed at slå fast som dataprofessionel.

Grunden til, at SQL er så vigtig, er, at det er den vigtigste færdighed, der kræves under datastridsfasen. En masse dataudforskning, datamanipulation, pipelineudvikling og oprettelse af dashboards udføres gennem SQL.

Det, der adskiller store dataforskere fra gode dataforskere, er, at store dataforskere kan skændes med data så meget som SQL-kapaciteten tillader. En stor del af at være i stand til fuldt ud at bruge alt, hvad SQL har at tilbyde, er ved at vide, hvordan man bruger vinduesfunktioner.

Med det sagt, lad os dykke ned i det!

1. Deltaer med LEAD() og LAG()

 
LEAD() og LAG() bruges mest, når man sammenligner en tidsperiode med den foregående tidsperiode for en given metrik. For at give et par eksempler...

  • Du kan få deltaet mellem hvert års salg og det foregående års salg
  • Du kan få deltaet i antallet af tilmeldinger/konverteringer/websitebesøg på månedsbasis
  • Du kan sammenligne brugerafgang på månedsbasis

Eksempel:

Følgende forespørgsel viser, hvordan du kan forespørge på den månedlige procentvise ændring i omkostninger

with monthly_costs as ( SELECT date , monthlycosts , LEAD(monthlycosts) OVER (ORDER BY date) as previousCosts FROM costs )SELECT date , (monthlycosts - previousCosts) / previousCosts * 100 AS costPercentChange FROM monthly_costs

2. Kumulative summer med SUM() eller COUNT()

 
Beregning af løbende totaler kan simpelthen gøres gennem en Windows-funktion, der starter med SUM() eller COUNT(). Dette er et kraftfuldt værktøj, når du vil vise væksten af ​​en bestemt metrik over tid. Mere specifikt er det nyttigt under følgende omstændigheder:

  • Få en løbende total af indtægter og omkostninger over tid
  • Få en løbende total tid brugt på app pr. bruger
  • Få et løbende antal konverteringer over tid

Eksempel:

Følgende eksempel viser, hvordan du kan inkludere en kumulativ sumkolonne af månedlige omkostninger:

SELECT date , monthlycosts , SUM(monthlycosts) OVER (ORDER BY date) as cumCosts FROM cost_table

3. Glidende gennemsnit med AVG()

 
AVG() er virkelig kraftfuld i Windows-funktioner, da den giver dig mulighed for at beregne glidende gennemsnit over tid.

Glidende gennemsnit er en enkel, men effektiv måde at forudsige værdier på kort sigt. De er også ekstremt nyttige til at udjævne flygtige kurver på en graf. Generelt bruges glidende gennemsnit til at måle den generelle retning af, hvor tingene bevæger sig.

Mere specifikt…

  • De kan bruges til at få den generelle tendens for ugentlige salg (går gennemsnittet op over tid?). Det tyder på vækst som virksomhed.
  • De kan ligeledes bruges til at få den generelle tendens til ugentlige konverteringer eller webstedsbesøg.

Eksempel:

Følgende forespørgsel er et eksempel på at få det 10-dages glidende gennemsnit for konverteringer.

SELECT Date , dailyConversions , AVG(dailyConversions) OVER (ORDER BY Date ROWS 10 PRECEDING) AS 10_dayMovingAverage FROM conversions

4. ROW_NUMBER()

 
ROW_NUMBER() er især nyttig, når du vil have den første eller sidste post. For eksempel, hvis du har en tabel over, hvornår medlemmer af fitnesscenteret kom til fitnesscenteret, og du vil have datoen for den første dag, de kom til fitnesscentret, kan du OPDELE EFTER kunde (navn/id) og BESTILLE EFTER købsdato. Derefter, for at få den første række, kan du blot filtrere efter rækkerne med rowNumber lig med én.

Eksempel:

Dette eksempel viser, hvordan du kan bruge ROW_NUMBER() til at få den første dato for, hvornår hvert medlem (bruger) besøgte.

with numbered_visits as ( SELECT memberId , visitDate , ROW_NUMBER() OVER (PARTITION BY customerId ORDER BY purchaseDate) as rowNumber FROM gym_visits )SELECT * FROM numbered_visits WHERE rowNumber = 1

For at opsummere, hvis du nogensinde har brug for at få den første eller sidste post, er ROW_NUMBER() en fantastisk måde at opnå det på.

5. Rekordrangering med DENSE_RANK()

 
DENSE_RANK() ligner ROW_NUMBER() bortset fra, at den returnerer den samme rangering for lige værdier. Tæt rangering er ret nyttig, når det kommer til at hente toprekorderne, for eksempel:

  • Hvis du vil trække de 10 mest sete Netflix-shows i denne uge
  • Hvis du ønsker at få de 100 bedste brugere baseret på brugte dollars
  • Hvis du vil se adfærden hos de 1000 mindst aktive brugere

Eksempel:

Hvis du ville rangere dine topkunder efter samlet salg, ville DENSE_RANK() være en passende funktion at bruge.

SELECT customerId , totalSales , DENSE_RANK() OVER (ORDER BY totalSales DESC) as rank FROM customers

Tak fordi du læste!

 
Og det er alt! Jeg håber, at dette hjælper dig i dit interviewforberedelse - jeg er sikker på, at hvis du kender disse 5 begreber ud og ind, vil du klare dig godt, når det kommer til de fleste SQL-vinduefunktionsproblemer derude.

Som altid ønsker jeg dig alt det bedste i dine læringsbestræbelser!

 
 
Terence Shin er dataentusiast med 3+ års erfaring i SQL og 2+ års erfaring i Python, og blogger på Towards Data Science og KDnuggets.

Original. Genopslået med tilladelse.

Kilde: https://www.kdnuggets.com/2022/01/top-five-sql-window-functions-know-data-science-interviews.html

Tidsstempel:

Mere fra KDnuggets