Att beräkna Percentil hjälper dig att rangordna data för analys samt beräkna median för en uppsättning värden. Så här beräknar du percentilen i PostgreSQL med percentile_cont fönsterfunktion. Vi kommer också att titta på hur man beräknar 50:e percentilen, 90:e percentilen, 95:e percentilen och n:te percentilen i PostgreSQL, eftersom de ofta används i dataanalys.
Hur man beräknar procent i PostgreSQL
Vi kommer att beräkna percentilen i PostgreSQL med percentile_cont fönsterfunktion
Låt oss säga att du har följande tabell försäljning(orderdatum, belopp) och du vill beräkna 50:e percentilen.
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
Bonusläsning:Hur man fyller i saknade datum i PostgreSQL
Här är frågan för att beräkna 50:e percentilen i PostgreSQL. Du kan använda samma fråga för att beräkna median 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 fönsterfunktion som låter dig definiera vilken percentil (t.ex. 0,5 det är 50:e percentilen) du vill beräkna. Sedan använder vi även WITHIN GROUP-satsen för att beräkna percentilen inom gruppen försäljning värden. Vi använder också ORDER BY-satsen för att sortera rean värden innan vi beräknar percentilen i PostgreSQL.
När du använder percentile_cont fönsterfunktion, kommer PostgreSQL att interpolera medianvärdet som medelvärdet av 2 mellanvärden (210, 215), om det finns 2 mellanvärden. Det är därför den returnerar 212,5
Bonus Läs:Hur man beräknar glidande medelvärde i PostgreSQL
När du kan beräkna percentilen i PostgreSQL, om du inte vill att PostgreSQL ska interpolera utan bara returnerar det närmaste värdet, använd percentile_disc fönsterfunktion istället. Här är ett exempel
postgres=# SELECT PERCENTILE_DISC(0.5) WITHIN GROUP(ORDER BY sale) FROM sales; percentile_disc ----------------- 210
I det här fallet kommer det att returnera ett av mellanvärdena, om det finns två mellanvärden.
Bonus Läs:Hur man importerar CSV-fil till PostgreSQL
Hur man beräknar 90:e percentilen i PostgreSQL
På samma sätt kan du beräkna 90:e percentilen i PostgreSQL med percentile_cont. Vi ändrar 0,5 till 0,9 i percentile_cont funktion
postgres=# SELECT PERCENTILE_CONT(0.9) WITHIN GROUP(ORDER BY sale) FROM sales; percentile_cont ----------------- 255
Du kan också beräkna 90:e percentilen i PostgreSQL med percentile_disc
postgres=# SELECT PERCENTILE_DISC(0.9) WITHIN GROUP(ORDER BY sale) FROM sales; percentile_disc ----------------- 250
Hur man beräknar 95:e percentilen i PostgreSQL
På liknande sätt kan du beräkna 95:e percentilen i PostgreSQL med percentile_cont
postgres=# SELECT PERCENTILE_CONT(0.95) WITHIN GROUP(ORDER BY sale) FROM sales; percentile_cont ----------------- 277.5
Du kan också beräkna 95:e percentilen i PostgreSQL med percentile_disc
postgres=# SELECT PERCENTILE_DISC(0.95) WITHIN GROUP(ORDER BY sale) FROM sales; percentile_disc ----------------- 300
Hur man beräknar n:te percentilen i PostgreSQL
På samma sätt kan du beräkna n:te percentilen i PostgreSQL med percentile_cont. Vi levererar i princip n/100 i percentile_cont funktion
postgres=# SELECT PERCENTILE_CONT(n/100) WITHIN GROUP(ORDER BY sale) FROM sales;
Du kan också beräkna 90:e percentilen i PostgreSQL med percentile_disc
postgres=# SELECT PERCENTILE_DISC(n/100) WITHIN GROUP(ORDER BY sale) FROM sales;
När du har beräknat percentilen i PostgreSQL kan du använda ett PostgreSQL-rapporteringsverktyg för att plotta percentilvärdena tillsammans med försäljningsvärden på ett linjediagram för att analysera skillnaden och även göra målsättning. För det kommer vi att sammanfoga det beräknade 50:e percentilvä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 percentil, 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.