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

Come calcolare la mediana in PostgreSQL

Il calcolo della mediana ti aiuta a trovare il valore medio nei dati ed evitare il rumore dovuto a valori estremi. Ecco come calcolare la mediana in PostgreSQL usando percentile_cont poiché non esiste una funzione per calcolare la mediana in PostgreSQL

Come calcolare la mediana in PostgreSQL

Calcoleremo la mediana in PostgreSQL calcolando il valore del 50° percentile, poiché non esiste una funzione incorporata per calcolare la mediana in PostgreSQL.

Supponiamo che tu abbia la seguente tabella sales(order_date,amount)

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 calcolare la media mobile in PostgreSQL

Ecco la query per trovare la mediana, ovvero calcolare il 50° percentile 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 che permette di definire quale percentile (es. 0,5 che è il 50° percentile) si vuole calcolare. Quindi utilizziamo anche la clausola WITHIN GROUP per dire a PostgreSQL di calcolare il percentile all'interno del gruppo di vendita valori. Usiamo anche la clausola ORDER BY per dire a PostgreSQL di ordinare la vendita valori prima di calcolare la mediana.

Quando usi percentile_cont , PostgreSQL interpolerà il valore mediano come media di 2 valori medi (210.215).

Bonus Lettura:come importare file CSV nella tabella PostgreSQL

Se non vuoi che PostgreSQL interpoli ma restituisca solo il valore più vicino, usa percentile_disc invece. Ecco un esempio

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

Se vuoi calcolare la mediana in PostgreSQL per ogni gruppo, usa la clausola GROUP BY come mostrato di seguito. Diciamo le tue vendite la tabella contiene anche prodotto colonna con i nomi dei prodotti. In tal caso, puoi calcolare la mediana per ciascun prodotto utilizzando la query seguente.

postgres=# SELECT PRODUCT, PERCENTILE_CONT(0.5) WITHIN GROUP(ORDER BY sale) 
FROM sales 
GROUP BY PRODUCT;

Bonus Lettura:Come calcolare la crescita mese dopo mese in PostgreSQL

Dopo aver calcolato la mediana in PostgreSQL, puoi utilizzare uno strumento di reportistica di PostgreSQL per tracciare i valori mediani insieme ai valori di vendita su un grafico a linee per analizzare la differenza. Per questo uniremo il valore mediano calcolato 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 alla mediana, tracciato utilizzando Ubiq

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