PERCENTILE_CONT (Transact-SQL)
Calcula un percentil basándose en una distribución continua de valores de columna en SQL Server 2012. El resultado se interpola y puede no ser igual que ninguno de los valores concretos de la columna.
Convenciones de sintaxis de Transact-SQL (Transact-SQL)
Sintaxis
PERCENTILE_CONT ( numeric_literal )
WITHIN GROUP ( ORDER BY order_by_expression [ ASC | DESC ] )
OVER ( [ <partition_by_clause> ] )
Argumentos
numeric_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. La expresión debe evaluarse como un tipo numérico exacto (int, bigint, smallint, tinyint, numeric, bit, decimal, smallmoney, money) o como un tipo numérico aproximado (float, real). No se permiten otros tipos de datos. 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> de la sintaxis de OVER no se pueden especificar en una función PERCENTILE_CONT.
Tipos de valor devuelto
float(53)
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