Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se aplica a:SQL Server
Azure SQL Database
Instancia administrada de Azure SQL
Azure Synapse Analytics
Analytics Platform System (PDW)
Punto de conexión de SQL Analytics en Microsoft Fabric
Almacén en Microsoft Fabric
Base de datos SQL en Microsoft Fabric
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. Para un valor de percentil determinado P, PERCENTILE_DISC ordena los valores de expresión en la ORDER BY cláusula . A continuación, devuelve el valor con el valor más CUME_DIST pequeño dado (con respecto a la misma especificación de ordenación) que es mayor o igual que P. Por ejemplo, PERCENTILE_DISC (0.5) calcula el percentil 50 (es decir, la mediana) de una expresión.
PERCENTILE_DISC calcula el percentil en función de 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
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.
DENTRO DEL GRUPO ( ORDEN POR order_by_expression [ ASC | DESC ] )
Especifica una lista de valores para ordenar y cuyo percentil se va a calcular. Solo se permite una order_by_expression. El criterio de ordenación predeterminado es ascendente. La lista de valores puede ser de cualquiera de los tipos de datos válidos para la operación de ordenación.
CAMBIO ( <partition_by_clause> )
Divide el conjunto de resultados de la FROM cláusula en particiones. La función percentile se aplica a estas particiones. Para obtener más información, vea CLÁUSULA SELECT - OVER. La <cláusula> ORDER BY y <las filas o la cláusula>range no se pueden especificar en una PERCENTILE_DISC función.
Tipos de retorno
El tipo de valor devuelto viene determinado por el tipo order_by_expression.
Soporte de compatibilidad
En el nivel de compatibilidad 110 y versiones posteriores, WITHIN GROUP es una palabra clave reservada. Para obtener más información, consulte Nivel de compatibilidad de ALTER DATABASE.
Observaciones
Se omite cualquier valor NULL del conjunto de datos.
PERCENTILE_DISC no es determinista. Para obtener más información, vea Funciones deterministas y no deterministas.
Ejemplos
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. Es posible que no devuelvan el mismo valor:
-
PERCENTILE_CONTdevuelve el valor adecuado, incluso si no existe en el conjunto de datos. -
PERCENTILE_DISCdevuelve un valor establecido real.
USE AdventureWorks2022;
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;
Este es un conjunto de resultados parcial.
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
Ejemplos: Azure Synapse Analytics y Sistema de la plataforma de análisis (PDW)
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. Es posible que no devuelvan el mismo valor:
-
PERCENTILE_CONTdevuelve el valor adecuado, incluso si no existe en el conjunto de datos. -
PERCENTILE_DISCdevuelve un valor establecido real.
-- Uses AdventureWorks
SELECT DISTINCT DepartmentName,
PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY BaseRate) OVER (PARTITION BY DepartmentName) AS MedianCont,
PERCENTILE_DISC(0.5) WITHIN GROUP (ORDER BY BaseRate) OVER (PARTITION BY DepartmentName) AS MedianDisc
FROM dbo.DimEmployee;
Este es un conjunto de resultados parcial.
DepartmentName MedianCont MedianDisc
-------------------- ---------- ----------
Document Control 16.826900 16.8269
Engineering 34.375000 32.6923
Human Resources 17.427850 16.5865
Shipping and Receiving 9.250000 9.0000