Referencia de funciones

PERCENTILE_CONT

Devuelve un percentil, es decir, el valor por debajo del cual queda la proporción indicada de los valores del grupo; entre valores contiguos calcula un valor intermedio.

PostgreSQL 17.9
PERCENTILE_CONT(fraction) WITHIN GROUP (ORDER BY expression)
fraction
Proporción de 0 a 1, por ejemplo 0.5 para la mediana; también admite un array de proporciones
double precision
expression
Expresión numérica o intervalo por el que se ordenan los valores
double precision | interval

Valor devuelto

Número (double precision) o intervalo; un array si fraction es un array; con un conjunto vacío, NULL

Ejemplos

Mediana y precio medio

PostgreSQL 17.9
SELECT PERCENTILE_CONT(0.5) WITHIN GROUP (
		ORDER BY unit_price
	) AS median,
	AVG(unit_price) AS average
FROM Payments;
medianaverage
1503231.1785714285714286

Precio mediano por miembro de la familia

PostgreSQL 17.9
SELECT family_member,
	PERCENTILE_CONT(0.5) WITHIN GROUP (
		ORDER BY unit_price
	) AS median_price
FROM Payments
GROUP BY family_member
ORDER BY family_member;
family_membermedian_price
19
2150
3100
4250
5230

Cuartiles en una sola llamada

PostgreSQL 17.9
SELECT PERCENTILE_CONT(ARRAY [0.25, 0.5, 0.75]) WITHIN GROUP (
		ORDER BY unit_price
	) AS quartiles
FROM Payments;
quartiles
[19,150,312.5]

Detalles

La función tiene una notación especial: la expresión no va entre los paréntesis, sino en WITHIN GROUP (ORDER BY ...). Los valores NULL se ignoran.

Si la posición cae entre dos valores, el resultado se calcula entre ellos: para 1, 2, 3 y 10 la mediana es 2.5. Para obtener uno de los valores existentes, usa PERCENTILE_DISC. A diferencia de AVG, la mediana apenas depende de unos pocos valores muy grandes.

Véase también