sql >> Database >  >> RDS >> Database

Lopend totaal berekenen in roodverschuiving

Cumulatief totaal, ook wel lopend totaal genoemd, is een handige KPI-statistiek om de totale waarden in de loop van de tijd te bewaken. Als uw gegevens zijn opgeslagen in Amazon Redshift, is het vrij eenvoudig om de cumulatieve som in Redshift te berekenen. Laten we eens kijken hoe we het lopende totaal in Redshift kunnen berekenen.

Hoe bereken je het lopende totaal in roodverschuiving

Hier zijn de stappen om het lopende totaal in Redshift te berekenen. Stel dat u de volgende tabel heeft met dagelijkse verkopen

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 |
+------------+------+

Stel dat u de cumulatieve som van verkopen wilt berekenen, bijvoorbeeld,

+------------+------+-----------------+
| 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 |
+------------+------+-----------------+

Hier is de SQL-query om het lopende totaal in Redshift te berekenen. Aangezien Redshift in feite PostgreSQL is, zijn alle functies en uitdrukkingen beschikbaar in PostgreSQL. We zullen dus een Window-functie gebruiken, beschikbaar in PostgreSQL, om dit te doen.

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

Laten we de bovenstaande vraag in detail bekijken. De SOM-functie hierboven berekent de cumulatieve som voor elke rij. We gebruiken echter een vensterfunctie OVER die ons helpt het aantal rijen te definiëren dat moet worden gebruikt voor het berekenen van het lopende totaal in Redshift.

Bonus lezen:voortschrijdend gemiddelde berekenen in roodverschuiving

Eerst ordenen we onze gegevens chronologisch op order_date om ervoor te zorgen dat we voor elke cumulatieve som de juiste rijen optellen. Vervolgens vertellen we Redshift voor elke rij dat de verkoop . moet optellen kolom voor alle voorgaande rijen. We doen dat met de vensterfunctie OVER, en vermelden rijen tussen onbegrensde voorgaande en huidige rij . Dat wil zeggen, beschouw voor elke rij alleen de voorgaande rijen voor de cumulatieve som.

Aangezien het raamkozijn voor elke rij verandert, worden alleen de voorgaande rijen gebruikt om het lopende totaal te berekenen.

Als u uw gegevens wilt filteren voordat u het lopende totaal in Redshift berekent, kunt u dit doen door de WHERE-clausule toe te voegen, zoals hieronder weergegeven.

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>;

Bonus Lezen: Hoe een draaitabel in PostgreSQL te maken

Aangezien Redshift in feite PostgreSQL is, kunt u de bovenstaande query ook gebruiken om het lopende totaal in PostgreSQL te berekenen.

Nadat u de cumulatieve som in Redshift hebt berekend, kunt u een gegevensvisualisatietool van Redshift gebruiken om deze in een lijndiagram te plotten. Hier is een voorbeeld van een lijndiagram voor cumulatief totaal, gemaakt met Ubiq.

Als u grafieken en dashboards wilt maken vanuit de Redshift-database, kunt u Ubiq proberen. We bieden een gratis proefperiode van 14 dagen.

  1. PHP/MySQL Null-waarden invoegen

  2. Oracle Leeftijdsberekening vanaf geboortedatum en vandaag

  3. Postgres dynamische queryfunctie

  4. Een reeks getallen genereren in MySQL