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

Jak vypočítat medián v PostgreSQL

Výpočet mediánu vám pomůže najít střední hodnotu v datech a vyhnout se šumu kvůli extrémním hodnotám. Zde je návod, jak vypočítat medián v PostgreSQL pomocí percentile_cont protože v PostgreSQL není žádná funkce pro výpočet mediánu

Jak vypočítat medián v PostgreSQL

Medián v PostgreSQL vypočítáme výpočtem hodnoty 50. percentilu, protože v PostgreSQL není žádná vestavěná funkce pro výpočet mediánu.

Řekněme, že máte následující tabulku prodej (datum_objednávky, částka)

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 vypočítat klouzavý průměr v PostgreSQL

Zde je dotaz k nalezení mediánu, tedy výpočtu 50. percentilu 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, která vám umožní definovat, jaký percentil (např. 0,5, což je 50. percentil) chcete vypočítat. Pak také používáme klauzuli WITHIN GROUP, abychom PostgreSQL sdělili, aby vypočítal percentil v rámci skupiny prodej hodnoty. Také používáme klauzuli ORDER BY, abychom PostgreSQL sdělili, aby třídil prodej hodnoty před výpočtem mediánu.

Když použijete percentile_cont , PostgreSQL bude interpolovat střední hodnotu jako průměr 2 středních hodnot (210 215).

Bonusové čtení:Jak importovat soubor CSV v tabulce PostgreSQL

Pokud nechcete, aby PostgreSQL interpoloval, ale vrátil pouze nejbližší hodnotu, použijte percentile_disc namísto. Zde je příklad

postgres=# SELECT PERCENTILE_DISC(0.5) WITHIN GROUP(ORDER BY sale) FROM sales;
 percentile_disc
-----------------
             210

Pokud chcete vypočítat medián v PostgreSQL pro každou skupinu, použijte klauzuli GROUP BY, jak je uvedeno níže. Řekněme vaše prodeje tabulka také obsahuje produkt sloupec s názvy produktů. V takovém případě můžete vypočítat medián pro každý produkt pomocí následujícího dotazu.

postgres=# SELECT PRODUCT, PERCENTILE_CONT(0.5) WITHIN GROUP(ORDER BY sale) 
FROM sales 
GROUP BY PRODUCT;

Bonusové čtení:Jak vypočítat měsíční růst v PostgreSQL

Po výpočtu mediánu v PostgreSQL můžete pomocí nástroje PostgreSQL Reporting Tool vykreslit mediánové hodnoty spolu s hodnotami prodeje do spojnicového grafu a analyzovat rozdíl. Za tímto účelem spojíme vypočítanou střední hodnotu 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 mediánem, 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. SQL OUTPUT Uložené procedury nefungují s ExecuteReader

  2. Tabulky vs. databáze:Je čas přejít? Část 2

  3. Existuje jednoduchý způsob, jak převést data MySQL do Title Case?

  4. MySQL AUTO_INCREMENT se nevrací