PERCENTILE_DISC (Transact-SQL)

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

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

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)