Måned over måned vækst er en nyttig forretningsmetrik KPI for måned over måned sammenligning af salg, tilmeldinger osv. Vi vil beregne månedlig procentvis vækst via SQL-forespørgsel, da der ikke er nogen PostgreSQL-funktion til det. Sådan beregner du månedlig vækst i PostgreSQL.
Sådan beregnes månedlig vækst i PostgreSQL
Lad os sige, at du har en tabel, der indeholder månedlige salg kaldet salgsdata(måned, udsalg)
postgres=# create table sales_data(month int,sale int); postgres=# insert into sales_data(month,sale) values(1,2021), (2,2102),(3,2150),(4,2312),(5,2425); postgres=# select * from sales_data; month | sale -------+------ 1 | 2021 2 | 2102 3 | 2150 4 | 2312 5 | 2425
Her er SQL-forespørgslen til at beregne månedlig procentvis vækst i salget i PostgreSQL.
postgres=# select month,sum(sale) as current_sale, lag(sum(sale), 1) over (order by month) as previous_month_sale, (100 * (sum(sale) - lag(sum(sale), 1) over (order by month)) / lag(sum(sale), 1) over (order by month)) || '%' as growth from sales_data group by 1 order by 1; month | current_sale | previous_month_sale | growth -------+--------------+---------------------+-------- 1 | 2021 | | 2 | 2102 | 2021 | 4% 3 | 2150 | 2102 | 2% 4 | 2312 | 2150 | 7% 5 | 2425 | 2312 | 4%
I ovenstående forespørgsel bruger vi LAG-vinduefunktionen til at beregne tidligere måneds salg og bruger den til at beregne måned over måned vækst i PostgreSQL. LAG giver dig mulighed for at hente rækken, der kommer før den nuværende række, med en defineret offset, som er 1 i vores tilfælde.
Bonuslæse: Sådan opretter du pivottabel i PostgreSQL
I de fleste tilfælde vil du have daglige salgsdata i stedet for månedlige tal. I dette tilfælde aggregerer vi det først til månedlige salgstal og anvender derefter ovenstående SQL-forespørgsel til at beregne væksten måned over måned i PostgreSQL.
Lad os sige, at du har daglige salgsdata.
postgres=# create sales (order_date date, sale int); postgres=# insert into sales values('2020-01-01',20), ('2020-01-02',25),('2020-01-03',15),('2020-01-04',30), ('2020-02-05',20),('2020-02-10',20),('2020-02-06',25), ('2020-03-07',15),('2020-03-08',30),('2020-03-09',20); postgres=# select * from sales; order_date | sale | ------------+------+ 2020-01-01 | 20 | 2020-01-02 | 25 | 2020-01-03 | 15 | 2020-01-04 | 30 | 2020-02-05 | 20 | 2020-02-10 | 20 | 2020-02-06 | 25 | 2020-03-07 | 15 | 2020-03-08 | 30 | 2020-03-09 | 20 |
Her er SQL-forespørgslen til at beregne månedlig vækstrate i PostgreSQL
postgres=# select month,sum(sale) as current_sale, lag(sum(sale), 1) over (order by month) as previous_month_sale, round((100 * (sum(sale) - lag(sum(sale), 1) over (order by month)) / lag(sum(sale), 1) over (order by month)),2) || '%' as growth from (select to_char(order_date,'Mon') as month, sum(sale) as sale from sales group by 1 ) sales_data group by 1 order by 1; month | current_sale | previous_month_sale | growth -------+--------------+---------------------+--------- Feb | 65 | | Jan | 90 | 65 | 38.46% Mar | 65 | 90 | -27.78%
I ovenstående forespørgsel samler vi de daglige salgsdata til månedlige værdier (med fed ) og brug derefter tidligere forespørgsel.
Du kan også filtrere dine data ved hjælp af en WHERE-klausul, før du beregner vækst fra måned til måned i PostgreSQL.
postgres=# select month,sum(sale) as current_sale, lag(sum(sale), 1) over (order by month) as previous_month_sale, round((100 * (sum(sale) - lag(sum(sale), 1) over (order by month)) / lag(sum(sale), 1) over (order by month)),2) || '%' as growth from (select to_char(order_date,'Mon') as month, sum(sale) as sale from sales WHERE condition group by 1 ) sales_data group by 1 order by 1;
Når du har beregnet vækst måned over måned i PostgreSQL, kan du bruge et rapporteringsværktøj til at plotte disse data på et søjlediagram eller dashboard og dele dem med dit team. Her er et eksempel på et søjlediagram, der viser vækst i procent måned over måned, oprettet ved hjælp af Ubiq.
Hvis du vil oprette diagrammer, dashboards og rapporter fra PostgreSQL-databasen, kan du prøve Ubiq. Vi tilbyder en 14-dages gratis prøveperiode.