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.