sql >> Base de Datos >  >> RDS >> PostgreSQL

Cómo calcular la mediana en PostgreSQL

Calcular la mediana lo ayuda a encontrar el valor medio en los datos y evitar el ruido debido a los valores extremos. Aquí se explica cómo calcular la mediana en PostgreSQL usando percentile_cont ya que no hay una función para calcular la mediana en PostgreSQL

Cómo calcular la mediana en PostgreSQL

Calcularemos la mediana en PostgreSQL calculando el valor del percentil 50, ya que no hay una función integrada para calcular la mediana en PostgreSQL.

Supongamos que tiene la siguiente tabla 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

Lectura adicional:Cómo calcular la media móvil en PostgreSQL

Aquí está la consulta para encontrar la mediana, es decir, calcular el percentil 50 en PostgreSQL.

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

En la consulta anterior, usamos percentile_cont función que le permite definir qué percentil (por ejemplo, 0,5 que es el percentil 50) desea calcular. Luego también usamos la cláusula WITHIN GROUP para decirle a PostgreSQL que calcule el percentil dentro del grupo de venta valores. También usamos la cláusula ORDER BY para decirle a PostgreSQL que ordene la venta valores antes de calcular la mediana.

Cuando usas percentile_cont , PostgreSQL interpolará el valor medio como el promedio de 2 valores medios (210,215).

Lectura adicional:Cómo importar un archivo CSV en una tabla de PostgreSQL

Si no desea que PostgreSQL interpole sino que solo devuelva el valor más cercano, use percentile_disc en cambio. Aquí hay un ejemplo

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

Si desea calcular la mediana en PostgreSQL para cada grupo, use la cláusula GROUP BY como se muestra a continuación. Digamos sus ventas la tabla también contiene producto columna con nombres de productos. En ese caso, puede calcular la mediana de cada producto mediante la siguiente consulta.

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

Lectura adicional:Cómo calcular el crecimiento mes a mes en PostgreSQL

Después de calcular la mediana en PostgreSQL, puede usar una herramienta de generación de informes de PostgreSQL para trazar los valores de la mediana junto con los valores de venta en un gráfico de líneas para analizar la diferencia. Para eso, uniremos el valor mediano calculado con las ventas originales. tabla como se muestra a continuación

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

Aquí hay un gráfico de líneas que muestra las ventas diarias junto con la mediana, trazadas con Ubiq

Si desea crear gráficos, paneles e informes a partir de la base de datos PostgreSQL, puede probar Ubiq. Ofrecemos una prueba gratuita de 14 días.