Compartir vía


PERCENTILE_CONT (Transact-SQL)

Se aplica a: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW) Punto de conexión de análisis SQL en Microsoft Fabric Almacenamiento en Microsoft Fabric

Calcula un percentil basado en una distribución continua del valor de columna en el Motor de base de datos de SQL Server. El resultado se interpola y es posible que no sea igual a ninguno de los valores específicos 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> ] )

Argumentos

numeric_literal

El percentil que se va a calcular. El valor debe oscilar entre 0.0 y 1.0.

WITHIN GROUP ( ORDER BY order_by_expression )

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 FROM cláusula en particiones a las que se aplica la función de percentil. Para obtener más información, vea SELECT - OVER Clause. La ORDER BY cláusula y <rows or range clause> de la OVER sintaxis no se pueden especificar en una PERCENTILE_CONT función.

Tipos de valores devueltos

float(53)

Soporte de compatibilidad

WITHIN GROUP es una palabra clave reservada, a partir del nivel 110de compatibilidad . Para más información, consulte Nivel de compatibilidad de ALTER DATABASE.

Comentarios

Se omite cualquier valor NULL del conjunto de datos.

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

Ejemplos

Los ejemplos de código de Transact-SQL de este artículo utilizan la base de datos de ejemplo AdventureWorks2022 o AdventureWorksDW2022, que se pueden descargar desde la página principal de Ejemplos y proyectos de la comunidad de Microsoft SQL Server.

A Buscar salario de empleado medio por departamento

En el ejemplo siguiente se usa PERCENTILE_CONT y PERCENTILE_DISC para buscar el salario de empleado medio en cada departamento. Es posible que estas funciones no devuelvan el mismo valor. PERCENTILE_CONT interpola el valor adecuado, que podría existir o no en el conjunto de datos, mientras que PERCENTILE_DISC siempre devuelve un valor real del conjunto.

USE AdventureWorks2022;
GO

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

Ejemplos: Azure Synapse Analytics y Sistema de la plataforma de análisis (PDW)

En el ejemplo siguiente se usa la AdventureWorksDW2012 base de datos de ejemplo.

B. Buscar salario de empleado medio por departamento

En el ejemplo siguiente se usa PERCENTILE_CONT y PERCENTILE_DISC para buscar el salario de empleado medio en cada departamento. Es posible que estas funciones no devuelvan el mismo valor. PERCENTILE_CONT interpola el valor adecuado, que podría existir o no en el conjunto de datos, mientras que PERCENTILE_DISC siempre devuelve un valor real del conjunto.

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