PERCENTILE_DISC (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 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 cláusula ORDER BY. A continuación, devuelve el valor con el menor valor de CUME_DIST dado (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

Sintaxis

PERCENTILE_DISC ( 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

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

OVER (<partition_by_clause>)**
Divide el conjunto de resultados de la cláusula FROM en particiones. La función percentile se aplica a estas particiones. Para más información, vea Cláusula OVER (Transact-SQL). Las cláusulas <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 order_by_expression.

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_DISC es no determinista. Para obtener más información, consulte Deterministic and Nondeterministic Functions.

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. Tenga en cuenta que puede que estas funciones no devuelvan el mismo valor:

  • PERCENTILE_CONT devuelve el valor adecuado, aunque no exista en el conjunto de datos.
  • PERCENTILE_DISC 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

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. Tenga en cuenta que puede que estas funciones no devuelvan el mismo valor:

  • PERCENTILE_CONT devuelve el valor adecuado, aunque no exista en el conjunto de datos.
  • PERCENTILE_DISC 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_CONT (Transact-SQL)