Beregning Av Løpende Totaler ved HJELP AV SQL oktober 20, 2015 | Andy Granowitz
Hvor mange brukere har blitt med i DE siste 5 månedene? Hva var totalt salg I Q2? Hvor mye inntekter kom Fra mars registrere kohorten?
selv om disse spørsmålene kan besvares med et enkelt tall, kan det være nyttig å se en løpende sum over tid: hvor mange unike brukere ble med, eller hvor mye kumulative inntekter ble mottatt per dag over en periode.
vanligvis lagres data trinnvis. For eksempel, her er en tabell med salg per dag:
Date | Sales |
---|---|
10/1/2015 | 5 |
10/2/2015 | 3 |
10/3/2015 | 7 |
10/4/2015 | 8 |
10/5/2015 | 2 |
10/6/2015 | 3 |
10/7/2015 | 6 |
How do we generate the following table of cumulative sales over time? In SQL, there are two typical approaches: a self join or a window function.
Date | Running Total of Sales |
---|---|
10/1/2015 | 5 |
10/2/2015 | 8 |
10/3/2015 | 15 |
10/4/2015 | 23 |
10/5/2015 | 25 |
10/6/2015 | 28 |
10/7/2015 | 34 |
A self join is a query that compares a table to itself. I dette tilfellet sammenligner vi hver dato med en dato som er mindre enn eller lik den for å beregne løpende total. Konkret tar vi summen av sales
i den andre tabellen over hver rad som har en dato mindre enn eller lik datoen som kommer fra den første tabellen. Dette Er Postgres / Redshift syntaks, men andre SQL dialekter er svært like.dette er ikke en dårlig tilnærming; det er en fin presentasjon av hvordan extensible SQL kan bruke bare select
from
join
og group by
uttalelser.
men det er mye kode for en enkel oppgave. La oss prøve en vindusfunksjon. De er utformet for å beregne en beregning over et sett med rader. I vårt tilfelle vil vi summere hver rad der datoen er mindre enn eller lik datoen i gjeldende rad.
vindusfunksjonen kan filtrere og ordne settet med rader for å kjøre funksjonen over. Her begrenserorder by date rows unbounded preceding
sum-funksjonen til bare sales
før datoen for gjeldende rad. Vindu funksjoner er utrolig nyttig for tidsbaserte analytiske spørringer; For å lære mer, Er Postgres docs et flott sted å starte.
det siste trinnet med å lage et diagram og dele det triumferende med lagkameratene dine, oppnås enkelt ved Hjelp Av Wagon. Vindu funksjoner for seieren!Wagon Er en moderne SQL editor for analytikere og ingeniører: skrive spørringer, visualisere data, og dele diagrammer med teamet ditt. Registrer deg gratis: