sql >> Databáze >  >> RDS >> PostgreSQL

Jak vypočítat měsíční růst v PostgreSQL

Růst mezi měsíci je užitečná obchodní metrika KPI pro meziměsíční srovnání prodejů, registrací atd. Měsíční procentuální růst vypočítáme pomocí SQL dotazu, protože pro něj neexistuje funkce PostgreSQL. Zde je návod, jak vypočítat meziměsíční růst v PostgreSQL.

Jak vypočítat měsíční růst v PostgreSQL

Řekněme, že máte tabulku obsahující měsíční tržby s názvem data_prodeje(měsíc, prodej)

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

Zde je dotaz SQL pro výpočet meziměsíčního procentuálního růstu prodeje v 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%

Ve výše uvedeném dotazu používáme funkci okna MAS k výpočtu tržeb za předchozí měsíc a používáme ji k výpočtu meziměsíčního růstu v PostgreSQL. LAG vám umožňuje načíst řádek, který předchází aktuální řádek, s definovaným posunem, což je v našem případě 1.

Bonusové čtení: Jak vytvořit kontingenční tabulku v PostgreSQL

Ve většině případů budete mít místo měsíčních čísel denní údaje o prodeji. V tomto případě to nejprve agregujeme do měsíčních prodejních čísel a poté použijeme výše uvedený SQL dotaz k výpočtu meziměsíčního růstu v PostgreSQL.

Řekněme, že máte denní údaje o prodeji.

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 |

Zde je dotaz SQL pro výpočet měsíční míry růstu v 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%

Ve výše uvedeném dotazu agregujeme denní údaje o prodeji na měsíční hodnoty (tučně ) a poté použijte dřívější dotaz.

Před výpočtem meziměsíčního růstu v PostgreSQL můžete také filtrovat svá data pomocí klauzule WHERE.

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;

Poté, co spočítáte meziměsíční růst v PostgreSQL, můžete použít nástroj pro vytváření sestav k vykreslení těchto dat na sloupcový graf nebo řídicí panel a sdílet je se svým týmem. Zde je příklad sloupcového grafu, který ukazuje meziměsíční procentní růst, vytvořený pomocí Ubiq.

Pokud chcete vytvářet grafy, dashboardy a sestavy z databáze PostgreSQL, můžete zkusit Ubiq. Nabízíme 14denní bezplatnou zkušební verzi.

  1. Chyba 1033 přijala přihlášení do pohotovostního režimu

  2. Vytvoření studeného pohotovostního režimu pro PostgreSQL pomocí Amazon AWS

  3. Nastavení místní databáze SQL Server

  4. Začínáme s Oracle LiveSQL