PERCENTILE_DISC (Transact-SQL)
Calcula un percentil concreto para los valores ordenados de un conjunto de filas completo o dentro de particiones distintas de un conjunto de filas de SQL Server 2012. Para un valor de percentil P dado, PERCENTILE_DISC ordena los valores de la expresión de la cláusula ORDER BY y devuelve el valor que tiene el menor valor de CUME_DIST (con respecto a la misma especificación de ordenación) que es mayor o igual que P. Por ejemplo, PERCENTILE_DISC (0.5) calculará el cincuentavo percentil (es decir, la mediana) de una expresión. PERCENTILE_DISC calcula el percentil basándose en una distribución discreta de los valores de columna; el resultado es igual a un valor específico de la columna.
Convenciones de sintaxis de Transact-SQL (Transact-SQL)
Sintaxis
PERCENTILE_DISC ( numeric_literal ) WITHIN GROUP ( ORDER BY order_by_expression [ ASC | DESC ] )
OVER ( [ <partition_by_clause> ] )
Argumentos
literal
El percentil que se va a calcular. El valor debe estar entre 0.0 y 1.0.WITHIN GROUP ( ORDER BY order_by_expression [ ASC | DESC ])
Especifica una lista de valores numéricos para ordenar y cuyo percentil se va a calcular. Solo se permite un parámetro order_by_expression. El criterio de ordenación predeterminado es ascendente.OVER ( <partition_by_clause> )
Divide el conjunto de resultados generado por la cláusula FROM en particiones a las que se aplica la función de percentil. Para obtener más información, vea OVER (cláusula de Transact-SQL). <ORDER BY clause> y <rows or range clause> no se pueden especificar en una función PERCENTILE_DISC.
Tipos de valor devuelto
El tipo de valor devuelto viene determinado por el tipo de order_by_expression.
Soporte de compatibilidad
En el nivel de compatibilidad 110, WITHIN GROUP es una palabra clave reservada. Para obtener más información, vea Nivel de compatibilidad de ALTER DATABASE (Transact-SQL).
Comentarios generales
Se omite cualquier valor NULL del conjunto de datos.
Ejemplos
A.Ejemplo de sintaxis básica
En el ejemplo siguiente se usa PERCENTILE_CONT y PERCENTILE_DISC para buscar el salario medio de los empleados de cada departamento. Tenga en cuenta que estas funciones pueden no devolver el mismo valor. Esto se debe a que PERCENTILE_CONT interpola el valor adecuado, tanto si existe en el conjunto de datos como si no existe, mientras que PERCENTILE_DISC siempre devuelve un valor real del conjunto.
USE AdventureWorks2012;
SELECT DISTINCT Name AS DepartmentName
,PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY ph.Rate)
OVER (PARTITION BY Name) AS MedianCont
,PERCENTILE_DISC(0.5) WITHIN GROUP (ORDER BY ph.Rate)
OVER (PARTITION BY Name) AS MedianDisc
FROM HumanResources.Department AS d
INNER JOIN HumanResources.EmployeeDepartmentHistory AS dh
ON dh.DepartmentID = d.DepartmentID
INNER JOIN HumanResources.EmployeePayHistory AS ph
ON ph.BusinessEntityID = dh.BusinessEntityID
WHERE dh.EndDate IS NULL;
A continuación se muestra un conjunto parcial de resultados.
DepartmentName MedianCont MedianDisc
-------------------- ---------- ----------
Document Control 16.8269 16.8269
Engineering 34.375 32.6923
Executive 54.32695 48.5577
Human Resources 17.427850 16.5865