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

Jak vypočítat percentil v PostgreSQL

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.

  1. Proč mají celá čísla v databázi řádků n-tice příponu 'L'?

  2. Převod z asynchronní na synchronní replikaci v PostgreSQL

  3. Jak vytvořit dynamické příkazy připravené postgresem v PHP

  4. Korupce MS Access Část 1:Běžné příčiny