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.