PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment calculer la médiane dans PostgreSQL

Le calcul de la médiane vous aide à trouver une valeur médiane dans les données et à éviter le bruit dû aux valeurs extrêmes. Voici comment calculer la médiane dans PostgreSQL en utilisant percentile_cont car il n'y a pas de fonction pour calculer la médiane dans PostgreSQL

Comment calculer la médiane dans PostgreSQL

Nous calculerons la médiane dans PostgreSQL en calculant la valeur du 50e centile, car il n'y a pas de fonction intégrée pour calculer la médiane dans PostgreSQL.

Disons que vous avez le tableau suivant 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

Lecture bonus :Comment calculer la moyenne mobile dans PostgreSQL

Voici la requête pour trouver la médiane, c'est-à-dire calculer le 50e centile dans PostgreSQL.

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

Dans la requête ci-dessus, nous utilisons percentile_cont fonction qui vous permet de définir quel centile (par exemple 0,5 soit le 50e centile) que vous souhaitez calculer. Ensuite, nous utilisons également la clause WITHIN GROUP pour dire à PostgreSQL de calculer le centile dans le groupe de vente valeurs. Nous utilisons également la clause ORDER BY pour dire à PostgreSQL de trier la vente valeurs avant de calculer la médiane.

Lorsque vous utilisez percentile_cont , PostgreSQL interpolera la valeur médiane comme la moyenne de 2 valeurs médianes (210 215).

Lecture bonus :Comment importer un fichier CSV dans une table PostgreSQL

Si vous ne voulez pas que PostgreSQL interpole mais renvoie uniquement la valeur la plus proche, utilisez percentile_disc Au lieu. Voici un exemple

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

Si vous souhaitez calculer la médiane dans PostgreSQL pour chaque groupe, utilisez la clause GROUP BY comme indiqué ci-dessous. Disons vos ventes le tableau contient également produit colonne avec les noms de produits. Dans ce cas, vous pouvez calculer la médiane pour chaque produit à l'aide de la requête suivante.

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

Lecture bonus :Comment calculer la croissance d'un mois sur l'autre dans PostgreSQL

Après avoir calculé la médiane dans PostgreSQL, vous pouvez utiliser un outil de création de rapports PostgreSQL pour tracer les valeurs médianes avec les valeurs de vente sur un graphique linéaire afin d'analyser la différence. Pour cela, nous joindrons la valeur médiane calculée aux ventes d'origine tableau comme indiqué ci-dessous

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

Voici un graphique linéaire qui montre les ventes quotidiennes ainsi que la médiane, tracées à l'aide d'Ubiq

Si vous souhaitez créer des graphiques, des tableaux de bord et des rapports à partir de la base de données PostgreSQL, vous pouvez essayer Ubiq. Nous offrons un essai gratuit de 14 jours.