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

Cómo calcular el percentil en PostgreSQL

El cálculo del percentil le ayuda a clasificar los datos para el análisis, así como a calcular la mediana de un conjunto de valores. Aquí se explica cómo calcular el percentil en PostgreSQL usando percentile_cont Función de ventana. También veremos cómo calcular el percentil 50, el percentil 90, el percentil 95 y el percentil n en PostgreSQL, ya que se usan comúnmente en el análisis de datos.

Cómo calcular el percentil en PostgreSQL

Calcularemos el percentil en PostgreSQL usando percentile_cont función de ventana

Supongamos que tiene la siguiente tabla sales(order_date,amount) y desea calcular el percentil 50.

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 completar las fechas que faltan en PostgreSQL

Aquí está la consulta para calcular el percentil 50 en PostgreSQL. Puede usar la misma consulta para calcular la mediana 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 de ventana que le permite definir qué percentil (por ejemplo, 0.5 es decir, el percentil 50) que desea calcular. Luego también usamos la cláusula DENTRO DEL GRUPO para calcular el percentil dentro del grupo de venta valores. También usamos la cláusula ORDER BY para ordenar la venta valores antes de calcular el percentil en PostgreSQL.

Cuando usas percentile_cont función de ventana, PostgreSQL interpolará el valor mediano como el promedio de 2 valores medios (210, 215), en caso de que haya 2 valores medios. Por eso devuelve 212.5

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

Cuando pueda calcular el percentil en PostgreSQL, si no desea que PostgreSQL interpole sino que solo devuelva el valor más cercano, use percentile_disc función de ventana en su lugar. Aquí hay un ejemplo

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

En este caso, devolverá el de los valores medios, en caso de que haya 2 valores medios.

Lectura adicional:Cómo importar un archivo CSV a PostgreSQL

Cómo calcular el percentil 90 en PostgreSQL

De manera similar, puede calcular el percentil 90 en PostgreSQL usando percentile_cont. Cambiamos 0.5 a 0.9 en percentil_cont función

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

También puede calcular el percentil 90 en PostgreSQL usando percentile_disc

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

Cómo calcular el percentil 95 en PostgreSQL

De manera similar, puede calcular el percentil 95 en PostgreSQL, usando percentile_cont

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

También puede calcular el percentil 95 en PostgreSQL usando percentile_disc

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

Cómo calcular el percentil n en PostgreSQL

De manera similar, puede calcular el percentil n en PostgreSQL usando percentile_cont. Básicamente proporcionamos n/100 en  percentile_cont función

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

También puede calcular el percentil 90 en PostgreSQL usando percentile_disc

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

Después de calcular el percentil en PostgreSQL, puede usar una herramienta de generación de informes de PostgreSQL para trazar los valores de percentil junto con los valores de venta en un gráfico de líneas para analizar la diferencia y también establecer objetivos. Para ello, uniremos el valor del percentil 50 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 el percentil, trazado 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.