sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur man beräknar procent i PostgreSQL

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.

  1. Hur listar jag alla tabeller i alla databaser i SQL Server i en enda resultatuppsättning?

  2. Konvertera 'smalldatetime' till 'time' i SQL Server (T-SQL-exempel)

  3. Jämför exekveringsplaner i SQL Server

  4. Hur man beräknar median i PostgreSQL