Obliczanie SQL Październik 20, 2015 | Andy Granowitz
ilu użytkowników dołączyło w ciągu ostatnich 5 miesięcy? Jaka była łączna sprzedaż w II kwartale? Ile przychodu pochodziło z marszowej kohorty?
chociaż na te pytania można odpowiedzieć pojedynczym numerem, przydatne może być zobaczenie sumy bieżącej w czasie: ilu unikalnych użytkowników dołączyło lub ile skumulowanych przychodów zostało otrzymanych w ciągu dnia w pewnym okresie.
Zazwyczaj dane są przechowywane stopniowo. Na przykład, oto tabela sprzedaży dziennie:
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. W tym przypadku porównujemy każdą datę z dowolną datą mniejszą lub równą, aby obliczyć sumę bieżącą. Konkretnie, bierzemy sumę sales
w drugiej tabeli nad każdym wierszem, który ma datę mniejszą lub równą dacie pochodzącej z pierwszej tabeli. Jest to składnia Postgres/Redshift, ale inne dialekty SQL są bardzo podobne.
to nie jest złe podejście; jest to miła prezentacja tego, jak rozszerzalny SQL może używać tylkoselect
from
join
Igroup by
.
ale to dużo kodu do prostego zadania. Spróbujmy funkcji okna. Są one przeznaczone do obliczania metryki na zbiorze wierszy. W naszym przypadku chcemy zsumować każdy wiersz, w którym Data jest mniejsza lub równa dacie w bieżącym wierszu.
funkcja okna może filtrować i układać zestaw wierszy, aby uruchomić funkcję. Tutaj order by date rows unbounded preceding
ogranicza funkcję sumy tylko do sales
przed datą bieżącego wiersza. Funkcje okna są niezwykle przydatne dla zapytań analitycznych opartych na czasie; aby dowiedzieć się więcej, dokumenty Postgres są doskonałym miejscem, aby zacząć.
ostatni krok tworzenia wykresu i dzielenia się nim triumfalnie z kolegami z Drużyny można łatwo osiągnąć za pomocą Wagon. Funkcje okna dla wygranej!
Wagon to nowoczesny edytor SQL dla analityków i inżynierów: pisz zapytania, wizualizuj Dane i udostępniaj wykresy zespołowi. Zarejestruj się za darmo: