Tillväxt månad över månad är ett användbart affärsmått för jämförelse av försäljning, registreringar, etc. Vi kommer att beräkna månatlig procentuell tillväxt via SQL-fråga, eftersom det inte finns någon PostgreSQL-funktion för det. Så här beräknar du månadsvis tillväxt i PostgreSQL.
Hur man beräknar tillväxt från månad till månad i PostgreSQL
Anta att du har en tabell som innehåller månadsförsäljning som heter försäljningsdata(månad, rea)
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
Här är SQL-frågan för att beräkna månadsvis procentuell försäljningstillväxt 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 ovanstående fråga använder vi LAG-fönsterfunktionen för att beräkna föregående månads försäljning och använder den för att beräkna månadsvis tillväxt i PostgreSQL. LAG låter dig hämta raden som kommer före den aktuella raden, med en definierad offset, som är 1 i vårt fall.
Bonus läsning: Hur man skapar pivottabell i PostgreSQL
I de flesta fall kommer du att ha dagliga försäljningsdata, istället för månadssiffror. I det här fallet aggregerar vi det först till månatliga försäljningssiffror och tillämpar sedan ovanstående SQL-fråga för att beräkna månadsvis tillväxt i PostgreSQL.
Låt oss säga att du har dagliga försäljningsdata.
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 |
Här är SQL-frågan för att beräkna månatlig tillväxttakt 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 ovanstående fråga aggregerar vi den dagliga försäljningsdatan till månadsvärden (i fetstil ) och använd sedan tidigare fråga.
Du kan också filtrera dina data med hjälp av en WHERE-klausul innan du beräknar tillväxt från månad till månad 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 beräknat tillväxten månad för månad i PostgreSQL kan du använda ett rapportverktyg för att plotta denna data på ett stapeldiagram eller instrumentpanel och dela den med ditt team. Här är ett exempel på ett stapeldiagram som visar procentuell tillväxt från månad till månad, skapat med Ubiq.
Om du vill skapa diagram, instrumentpaneler och rapporter från PostgreSQL-databasen kan du prova Ubiq. Vi erbjuder en 14-dagars gratis provperiod.