Месечният растеж на месеца е полезен бизнес метрика KPI за сравнение на продажбите, регистрациите и т.н. за месец за месец. Ще изчислим месечния процент растеж чрез SQL заявка, тъй като няма PostgreSQL функция за него. Ето как да изчислите растежа от месец в месец в PostgreSQL.
Как да изчислим растежа от месец спрямо месец в PostgreSQL
Да приемем, че имате таблица, която съдържа месечни продажби, наречени sales_data(month, sale)
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
Ето SQL заявката за изчисляване на процентния ръст на продажбите от месец за месец в 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%
В горната заявка използваме функцията на прозореца на LAG, за да изчислим продажбите от предходния месец и я използваме за изчисляване на растежа от месец през месец в PostgreSQL. LAG ви позволява да извлечете реда, който идва преди настоящия ред, с определено отместване, което в нашия случай е 1.
Бонус за четене: Как да създадете обобщена таблица в PostgreSQL
В повечето случаи ще имате ежедневни данни за продажбите, вместо месечни числа. В този случай първо го обобщаваме към месечните продажби и след това прилагаме горната SQL заявка, за да изчислим растежа от месец през месец в PostgreSQL.
Да приемем, че имате ежедневни данни за продажбите.
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 |
Ето SQL заявката за изчисляване на месечния темп на растеж в 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%
В горната заявка ние обобщаваме дневните данни за продажбите до месечни стойности (с удебелен ) и след това използвайте по-ранна заявка.
Можете също да филтрирате данните си, като използвате клауза WHERE, преди да изчислите нарастването от месец на месец в 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;
След като изчислите растежа от месец в месец в PostgreSQL, можете да използвате инструмент за отчитане, за да начертаете тези данни на лента или табло за управление и да ги споделите с вашия екип. Ето пример за лентова диаграма, която показва процентен ръст от месец спрямо месец, създадена с Ubiq.

Ако искате да създавате диаграми, табла за управление и отчети от базата данни PostgreSQL, можете да опитате Ubiq. Предлагаме 14-дневен безплатен пробен период.