Att beräkna median hjälper dig att hitta mellanvärdet i data och undvika brus på grund av extrema värden. Så här beräknar du median i PostgreSQL med percentile_cont eftersom det inte finns någon funktion för att beräkna median i PostgreSQL
Hur man beräknar median i PostgreSQL
Vi kommer att beräkna median i PostgreSQL genom att beräkna 50:e percentilvärdet, eftersom det inte finns någon inbyggd funktion för att beräkna median i PostgreSQL.
Låt oss säga att du har följande tabell försäljning(orderdatum, belopp)
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
Bonus Läs:Hur man beräknar glidande medelvärde i PostgreSQL
Här är frågan för att hitta median, det vill säga beräkna 50:e percentilen i PostgreSQL.
postgres=# SELECT PERCENTILE_CONT(0.5) WITHIN GROUP(ORDER BY sale) FROM sales; percentile_cont ----------------- 212.5
I ovanstående fråga använder vi percentile_cont funktion som låter dig definiera vilken percentil (t.ex. 0,5 som är 50:e percentilen) du vill beräkna. Sedan använder vi även WITHIN GROUP-satsen för att tala om för PostgreSQL att beräkna percentilen inom gruppen försäljning värden. Vi använder också ORDER BY-satsen för att tala om för PostgreSQL att sortera rean värden innan median beräknas.
När du använder percentile_cont , kommer PostgreSQL att interpolera medianvärdet som medelvärdet av 2 mellanvärden (210 215).
Bonus Läs:Hur man importerar CSV-fil i PostgreSQL-tabellen
Om du inte vill att PostgreSQL ska interpolera utan bara returnera det närmaste värdet, använd percentile_disc istället. Här är ett exempel
postgres=# SELECT PERCENTILE_DISC(0.5) WITHIN GROUP(ORDER BY sale) FROM sales; percentile_disc ----------------- 210
Om du vill beräkna median i PostgreSQL för varje grupp, använd GROUP BY-satsen som visas nedan. Låt oss säga din försäljning Tabellen innehåller också produkt kolumn med produktnamn. I så fall kan du beräkna medianen för varje produkt med hjälp av följande fråga.
postgres=# SELECT PRODUCT, PERCENTILE_CONT(0.5) WITHIN GROUP(ORDER BY sale) FROM sales GROUP BY PRODUCT;
Bonus Läs:Hur man beräknar månad över månad tillväxt i PostgreSQL
När du har beräknat median i PostgreSQL kan du använda ett PostgreSQL-rapporteringsverktyg för att plotta medianvärdena tillsammans med försäljningsvärden på ett linjediagram för att analysera skillnaden. För det kommer vi att sammanfoga det beräknade medianvärdet med den ursprungliga försäljningen tabell som visas nedan
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
Här är ett linjediagram som visar daglig försäljning tillsammans med median, ritat med Ubiq
Om du vill skapa diagram, instrumentpaneler och rapporter från PostgreSQL-databasen kan du prova Ubiq. Vi erbjuder en 14-dagars gratis provperiod.