sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur man beräknar median i PostgreSQL

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.

  1. Streama databaserade bilder med hjälp av HttpHandler

  2. Anropar ett PHP-skript från en MySQL-utlösare

  3. Installera Mtop (MySQL Database Server Monitoring) i RHEL/CentOS 6/5/4, Fedora 17-12

  4. Automatisk ökning på partiell primärnyckel med Entity Framework Core