sql >> Databasteknik >  >> RDS >> Database

Hur man beräknar löpande totalsumma i rödförskjutning

Kumulativ total, även känd som löpande total, är ett användbart KPI-mått för att övervaka totala summavärden över tid. Om din data lagras i Amazon Redshift är det ganska enkelt att beräkna kumulativ summa i Redshift. Låt oss se hur man beräknar löpande totalsumma i Redshift.

Hur man beräknar löpande totalsumma i rödförskjutning

Här är stegen för att beräkna löpande total i Redshift. Låt oss säga att du har följande tabell som innehåller daglig försäljning

postgres-#> create table sales(order_date date,sale int);

postgres-#> insert into sales values('2020-03-01',30),
('2020-03-02',35),('2020-03-03',25),('2020-03-04',40),('2020-03-05',30);

postgres-#> select * from sales;
+------------+------+
| order_date | sale |
+------------+------+
| 2020-03-01 |   30 |
| 2020-03-02 |   35 |
| 2020-03-03 |   25 |
| 2020-03-04 |   40 |
| 2020-03-05 |   30 |
+------------+------+

Låt oss säga att du vill beräkna den kumulativa summan av försäljningen, som så,

+------------+------+-----------------+
| order_date | sale | cumulative_sale |
+------------+------+-----------------+
| 2020-03-01 |   30 |              30 |
| 2020-03-02 |   35 |              65 |
| 2020-03-03 |   25 |              90 |
| 2020-03-04 |   40 |             130 |
| 2020-03-05 |   30 |             160 |
+------------+------+-----------------+

Här är SQL-frågan för att beräkna löpande totalsumma i Redshift. Eftersom Redshift i grunden är PostgreSQL är alla dess funktioner och uttryck tillgängliga i PostgreSQL. Så vi kommer att använda en fönsterfunktion, tillgänglig i PostgreSQL, för att göra det.

postgres=# SELECT order_date
          , sum(sale) over (order by order_date asc rows between unbounded preceding and current row)
          FROM   sales
          ORDER  BY order_date;

 order_date | sum
------------+-----
 2020-03-01 |  30
 2020-03-02 |  65
 2020-03-03 |  90
 2020-03-04 | 130
 2020-03-05 | 160

Låt oss titta på ovanstående fråga i detalj. SUM-funktionen ovan beräknar den kumulativa summan för varje rad. Däremot använder vi en fönsterfunktion OVER som hjälper oss att definiera antalet rader som ska användas för att beräkna löpande totalsumma i Redshift.

Bonusläsning:Hur man beräknar glidande medelvärde i rödförskjutning

Först ordnar vi vår data kronologiskt efter order_date för att säkerställa att vi lägger ihop rätt rader för varje ackumulerad summa. Därefter, för varje rad, säger vi till Redshift att summera rea kolumn för alla föregående rader. Vi gör det med fönsterfunktionen OVER, och nämner rader mellan obegränsad föregående och nuvarande rad . Det vill säga, för varje rad, överväg endast föregående rader för kumulativ summa.

Eftersom fönsterramen ändras för varje rad, kommer endast de föregående raderna att användas för att beräkna löpande totalsumma.

Om du vill filtrera din data innan du beräknar löpande totalsumma i Redshift, kan du göra det genom att lägga till WHERE-sats, som visas nedan.

postgres=# SELECT order_date
          , sum(sale) over (order by order_date asc rows between unbounded preceding and current row)
          FROM   sales
          ORDER  BY order_date
          WHERE <condition>;

Bonusläsning: Hur man skapar pivottabell i PostgreSQL

Eftersom Redshift i grunden är PostgreSQL kan du också använda ovanstående fråga för att beräkna löpande totalsumma i PostgreSQL.

När du har beräknat den kumulativa summan i Redshift kan du använda ett Redshift-datavisualiseringsverktyg för att plotta det på ett linjediagram. Här är ett exempel på ett linjediagram för kumulativ totalsumma, skapad med Ubiq.

Om du vill skapa diagram och instrumentpaneler från Redshift-databasen kan du prova Ubiq. Vi erbjuder en 14-dagars gratis provperiod.

  1. Hur man fyller datasetet med C# från Oracle-databasen

  2. Vad är Multi Dimension OLAP CUBE och ge exempel på kub med mer än 3 dimensioner

  3. 2nd Quadrant på PostgresConf US 2018

  4. SELECT höjer undantag i PL/pgSQL-funktionen