PERCENTILE_CONT (Transact-SQL)

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Punto de conexión de análisis SQL en Microsoft FabricAlmacenamiento en Microsoft Fabric

Calcula un percentil basándose en una distribución continua de valores de columna en SQL Server. El resultado se interpola y puede no ser igual que ninguno de los valores concretos de la columna.

Convenciones de sintaxis de Transact-SQL

Sintaxis

PERCENTILE_CONT ( numeric_literal )   
    WITHIN GROUP ( ORDER BY order_by_expression [ ASC | DESC ] )  
    OVER ( [ <partition_by_clause> ] )  

Nota:

Para ver la sintaxis de Transact-SQL para SQL Server 2014 (12.x) y versiones anteriores, consulte Versiones anteriores de la documentación.

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 una order_by_expression. La expresión necesita dar como resultado un tipo numérico exacto o aproximado, y no se permiten otros tipos de datos. Los tipos numéricos exactos con int, bigint, smallint, tinyint, numeric, bit, decimal, smallmoney y money. Los tipos numéricos aproximados son float y real. 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 más información, vea Cláusula OVER (Transact-SQL). Los parámetros <ORDER BY clause> y <rows or range clause> de la sintaxis 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 y posteriores, WITHIN GROUP es una palabra clave reservada. Para obtener más información, vea Nivel de compatibilidad de ALTER DATABASE (Transact-SQL).

Notas generales

Se omite cualquier valor NULL del conjunto de datos.

PERCENTILE_CONT es no determinista. Para obtener más información, consulte Deterministic and Nondeterministic Functions.

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 puede que estas funciones no devuelvan 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 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;  

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

B. 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 puede que estas funciones no devuelvan 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.

-- 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; 

A continuación se muestra un conjunto parcial de resultados.

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

Consulte también

PERCENTILE_DISC (Transact-SQL)