PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как да изчислим растежа на месец спрямо месец в PostgreSQL

Месечният растеж на месеца е полезен бизнес метрика 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-дневен безплатен пробен период.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Автоматично нарастване на PostgreSQL

  2. Грешка в Postgres SSL SYSCALL:EOF е открит с python и psycopg

  3. Как да получите заявка за атрибути на колона от името на таблицата с помощта на PostgreSQL?

  4. Изтриването на база данни трябва ли да се извършва не при никаква транзакция?

  5. Синтактична грешка в края на въвеждането в PostgreSQL