De agregaciónestándar SQL

PERCENTILE_DISC

Encuentra un percentil entre los valores existentes: una mediana que está seguro en los datos.

Sintaxis

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

Ordena los valores y devuelve el primero en el que se alcanza la proporción de filas indicada. A diferencia de PERCENTILE_CONT, no se inventa un punto medio entre dos valores, así que también funciona con fechas y texto.

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_DISC(0.5) WITHIN GROUP (ORDER BY salary) AS median_salary
FROM employees;
median_salary
1200
CONT frente a DISC en cada departamento
SELECT department,
PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY salary) AS cont,
PERCENTILE_DISC(0.5) WITHIN GROUP (ORDER BY salary) AS disc
FROM employees
GROUP BY department
ORDER BY department;
departmentcontdisc
backend11001000
design12001200
frontend1150950

backend tiene dos salarios: CONT toma el punto medio entre ellos —1100— y DISC, el menor de los existentes, 1000.

La fecha mediana de los pedidos
SELECT PERCENTILE_DISC(0.5) WITHIN GROUP (ORDER BY created_at) AS median_order
FROM orders;
median_order
2026-08-09 09:05:00

PERCENTILE_CONT no funciona con fechas, mientras que DISC simplemente toma una de las existentes.

Ten en cuenta

Con un número par de valores, toma el menor de los dos centrales: para 1000 y 1200, 1000, no 1100.

La sintaxis es la misma que en PERCENTILE_CONT: una fracción de 0 a 1 entre paréntesis y la columna en WITHIN GROUP (ORDER BY …).

No puede ser una función de ventana con OVER: OVER is not supported for ordered-set aggregate percentile_disc.

Funciones relacionadas