PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come calcolare il percentile in PostgreSQL

Il calcolo del percentile consente di classificare i dati per l'analisi e di calcolare la mediana per un insieme di valori. Ecco come calcolare il percentile in PostgreSQL usando percentile_cont funzione finestra. Vedremo anche come calcolare il 50° percentile, il 90° percentile, il 95° percentile e l'ennesimo percentile in PostgreSQL, poiché sono comunemente usati nell'analisi dei dati.

Come calcolare il percentile in PostgreSQL

Calcoleremo il percentile in PostgreSQL usando percentile_cont funzione finestra

Supponiamo che tu abbia la seguente tabella sales(order_date,amount) e vuoi calcolare il 50° percentile.

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 Leggi:Come riempire le date mancanti in PostgreSQL

Ecco la query per calcolare il 50° percentile in PostgreSQL. Puoi utilizzare la stessa query per calcolare la mediana in PostgreSQL.

postgres=# SELECT PERCENTILE_CONT(0.5) WITHIN GROUP(ORDER BY sale) FROM sales;
 percentile_cont
-----------------
           212.5

Nella query precedente, utilizziamo percentile_cont funzione della finestra che consente di definire quale percentile (ad es. 0.5 che è il 50° percentile) che si desidera calcolare. Quindi utilizziamo anche la clausola WITHIN GROUP per calcolare il percentile all'interno del gruppo di vendita valori. Utilizziamo anche la clausola ORDER BY per ordinare la vendita valori prima di calcolare il percentile in PostgreSQL.

Quando usi percentile_cont funzione finestra, PostgreSQL interpolerà il valore mediano come media di 2 valori medi (210, 215), nel caso ci siano 2 valori medi. Ecco perché restituisce 212,5

Bonus Leggi:Come calcolare la media mobile in PostgreSQL

Quando puoi calcolare il percentile in PostgreSQL, se non vuoi che PostgreSQL interpoli ma restituisca solo il valore più vicino, usa percentile_disc invece la funzione finestra. Ecco un esempio

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

In questo caso, restituirà quello dei valori medi, nel caso ci siano 2 valori medi.

Bonus Lettura:come importare file CSV in PostgreSQL

Come calcolare il 90° percentile in PostgreSQL

Allo stesso modo, puoi calcolare il 90° percentile in PostgreSQL usando percentile_cont. Cambiamo da 0,5 a 0,9 in percentile_cont funzione

postgres=# SELECT PERCENTILE_CONT(0.9) WITHIN GROUP(ORDER BY sale) FROM sales;
percentile_cont
-----------------
255

Puoi anche calcolare il 90° percentile in PostgreSQL utilizzando percentile_disc

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

Come calcolare il 95° percentile in PostgreSQL

Allo stesso modo, puoi calcolare il 95° percentile in PostgreSQL, usando percentile_cont

postgres=# SELECT PERCENTILE_CONT(0.95) WITHIN GROUP(ORDER BY sale) FROM sales;
percentile_cont
-----------------
277.5

Puoi anche calcolare il 95° percentile in PostgreSQL usando percentile_disc

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

Come calcolare l'ennesimo percentile in PostgreSQL

Allo stesso modo, puoi calcolare l'ennesimo percentile in PostgreSQL usando percentile_cont. In pratica forniamo n/100 in percentile_cont funzione

postgres=# SELECT PERCENTILE_CONT(n/100) WITHIN GROUP(ORDER BY sale) FROM sales;

Puoi anche calcolare il 90° percentile in PostgreSQL utilizzando percentile_disc

postgres=# SELECT PERCENTILE_DISC(n/100) WITHIN GROUP(ORDER BY sale) FROM sales;

Dopo aver calcolato il percentile in PostgreSQL, puoi utilizzare uno strumento di reportistica di PostgreSQL per tracciare i valori percentili insieme ai valori di vendita su un grafico a linee per analizzare la differenza e anche definire gli obiettivi. Per questo uniremo il valore calcolato del 50° percentile con le vendite originali tabella come mostrato di seguito

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

Ecco un grafico a linee che mostra le vendite giornaliere insieme al percentile, tracciato utilizzando Ubiq

Se vuoi creare grafici, dashboard e report dal database PostgreSQL, puoi provare Ubiq. Offriamo una prova gratuita di 14 giorni.