Výpočet percentilu vám pomůže seřadit data pro analýzu a také vypočítat medián pro sadu hodnot. Zde je návod, jak vypočítat percentil v PostgreSQL pomocí percentile_cont funkce okna. Podíváme se také na to, jak vypočítat 50. percentil, 90. percentil, 95. percentil a n. percentil v PostgreSQL, protože se běžně používají při analýze dat.
Jak vypočítat percentil v PostgreSQL
Percentil v PostgreSQL vypočítáme pomocí percentile_cont funkce okna
Řekněme, že máte následující tabulku prodej (datum_objednávky, částka) a chcete vypočítat 50. percentil.
postgres=# create table sales(order_date date,sale int); postgres=# insert into sales values('2020-04-01',210), ('2020-04-02',125),('2020-04-03',150),('2020-04-04',230), ('2020-04-05',200),('2020-04-10',220),('2020-04-06',25), ('2020-04-07',215),('2020-04-08',300),('2020-04-09',250); postgres=# select * from sales; order_date | sale ------------+------ 2020-04-01 | 210 2020-04-02 | 125 2020-04-03 | 150 2020-04-04 | 230 2020-04-05 | 200 2020-04-10 | 220 2020-04-06 | 25 2020-04-07 | 215 2020-04-08 | 300 2020-04-09 | 250
Bonusové čtení:Jak vyplnit chybějící data v PostgreSQL
Zde je dotaz pro výpočet 50. percentilu v PostgreSQL. Stejný dotaz můžete použít k výpočtu mediánu v PostgreSQL.
postgres=# SELECT PERCENTILE_CONT(0.5) WITHIN GROUP(ORDER BY sale) FROM sales; percentile_cont ----------------- 212.5
Ve výše uvedeném dotazu používáme percentile_cont funkce okna, která umožňuje definovat, jaký percentil (např. 0,5 to je 50. percentil), který chcete vypočítat. Potom také použijeme klauzuli WITHIN GROUP k výpočtu percentilu v rámci skupiny prodej hodnoty. Klauzuli ORDER BY používáme také k řazení prodeje hodnoty, než vypočítáme percentil v PostgreSQL.
Když použijete percentile_cont okno, PostgreSQL bude interpolovat střední hodnotu jako průměr 2 středních hodnot (210, 215), v případě, že existují 2 střední hodnoty. Proto vrací 212,5
Bonusové čtení:Jak vypočítat klouzavý průměr v PostgreSQL
Když můžete vypočítat percentil v PostgreSQL, pokud nechcete, aby PostgreSQL interpoloval, ale vrátil pouze nejbližší hodnotu, použijte percentile_disc místo toho funkci okna. Zde je příklad
postgres=# SELECT PERCENTILE_DISC(0.5) WITHIN GROUP(ORDER BY sale) FROM sales; percentile_disc ----------------- 210
V tomto případě vrátí jednu ze středních hodnot, pokud existují 2 střední hodnoty.
Bonusové čtení:Jak importovat soubor CSV do PostgreSQL
Jak vypočítat 90. percentil v PostgreSQL
Podobně můžete vypočítat 90. percentil v PostgreSQL pomocí percentile_cont. Měníme 0,5 až 0,9 vpercentile_cont funkce
postgres=# SELECT PERCENTILE_CONT(0.9) WITHIN GROUP(ORDER BY sale) FROM sales; percentile_cont ----------------- 255
Můžete také vypočítat 90. percentil v PostgreSQL pomocí percentile_disc
postgres=# SELECT PERCENTILE_DISC(0.9) WITHIN GROUP(ORDER BY sale) FROM sales; percentile_disc ----------------- 250
Jak vypočítat 95. percentil v PostgreSQL
Podobně můžete vypočítat 95. percentil v PostgreSQL pomocí percentile_cont
postgres=# SELECT PERCENTILE_CONT(0.95) WITHIN GROUP(ORDER BY sale) FROM sales; percentile_cont ----------------- 277.5
Můžete také vypočítat 95. percentil v PostgreSQL pomocí percentile_disc
postgres=# SELECT PERCENTILE_DISC(0.95) WITHIN GROUP(ORDER BY sale) FROM sales; percentile_disc ----------------- 300
Jak vypočítat n-tý percentil v PostgreSQL
Podobně můžete vypočítat n-tý percentil v PostgreSQL pomocí percentile_cont. V zásadě dodáváme n/100 v percentile_cont funkce
postgres=# SELECT PERCENTILE_CONT(n/100) WITHIN GROUP(ORDER BY sale) FROM sales;
Můžete také vypočítat 90. percentil v PostgreSQL pomocí percentile_disc
postgres=# SELECT PERCENTILE_DISC(n/100) WITHIN GROUP(ORDER BY sale) FROM sales;
Po výpočtu percentilu v PostgreSQL můžete pomocí nástroje PostgreSQL Reporting Tool vykreslit percentilové hodnoty spolu s hodnotami prodeje do spojnicového grafu, abyste mohli analyzovat rozdíl a také nastavit cíle. Za to spojíme vypočítanou hodnotu 50. percentilu s původním prodejem tabulka, jak je uvedeno níže
postgres=# select * from sales, (SELECT PERCENTILE_CONT(0.5) WITHIN GROUP(ORDER BY sale) FROM sales) temp order by order_date; order_date | sale | percentile_cont ------------+------+----------------- 2020-04-01 | 210 | 212.5 2020-04-02 | 125 | 212.5 2020-04-03 | 150 | 212.5 2020-04-04 | 230 | 212.5 2020-04-05 | 200 | 212.5 2020-04-06 | 25 | 212.5 2020-04-07 | 215 | 212.5 2020-04-08 | 300 | 212.5 2020-04-09 | 250 | 212.5 2020-04-10 | 220 | 212.5
Zde je spojnicový graf, který ukazuje denní prodeje spolu s percentilem, vykreslený 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.