De agregaciónestándar SQL

PERCENTILE_CONT

Encuentra la mediana u otro percentil: el valor por debajo del cual queda una proporción dada de los datos.

Sintaxis

PERCENTILE_CONT(<fracción>) WITHIN GROUP (ORDER BY <expresión>)

PERCENTILE_CONT(0.5) es la mediana: la mitad de los valores son menores y la otra mitad, mayores. A diferencia de la media, un solo valor muy grande no la desplaza. La función puede devolver un número entre dos existentes; si necesitas exactamente uno de los valores existentes, usa PERCENTILE_DISC.

Datos para los ejemplos

employees

namedepartmentsalarybonusphone
Emmabackend1200300+44 7700 900123
Liambackend1000NULLNULL
Oliviafrontend1350150+44 7700 900456
Noahfrontend950NULL+44 7700 900789
Sophiadesign1200200NULL

orders

idcreated_atamount
12026-07-03 10:15:00120.50
22026-07-28 18:40:0080.25
32026-08-09 09:05:00199.99
42026-08-21 14:30:0045.00
52026-09-02 11:00:0064.75

Estas tablas ya están creadas en el entorno de pruebas y los ejemplos de abajo las usan. ¿Quieres repetirlo en tu propia base de datos? Copia el SQL.

La mediana del salario
SELECT PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY salary) AS median_salary
FROM employees;
median_salary
1200
Mediana frente a media
SELECT PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY amount) AS median,
ROUND(AVG(amount), 2) AS average
FROM orders;
medianaverage
80.25102.10

El pedido de 199.99 tira de la media hacia arriba, mientras que la mediana sigue siendo un importe «típico».

Varios percentiles a la vez
SELECT PERCENTILE_CONT(ARRAY[0.25, 0.5, 0.75]) WITHIN GROUP (ORDER BY salary) AS quartiles
FROM employees;
quartiles
[1000,1200,1200]

Un array de fracciones da un array de respuestas: para un cuarto, la mitad y tres cuartos.

Ten en cuenta

La sintaxis es poco habitual: la fracción va entre los paréntesis de la función, y la columna, en WITHIN GROUP (ORDER BY …). PERCENTILE_CONT(salary, 0.5) da el error WITHIN GROUP is required for ordered-set aggregate.

La fracción va de 0 a 1, no en porcentaje: el percentil 90 es 0.9, y 90 da percentile value 90 is not between 0 and 1.

PERCENTILE_CONT solo trabaja con números e intervalos; para fechas y texto, usa PERCENTILE_DISC. Y no puede ser una función de ventana con OVER: OVER is not supported for ordered-set aggregate.

Funciones relacionadas

Más detalles en el curso