APPROX_PERCENTILE_DISC (Transact-SQL)

Se aplica a: SQL Server 2022 (16.x) Azure SQL DatabaseAzure SQL Managed InstancePunto de conexión de análisis SQL en Microsoft FabricAlmacenamiento en Microsoft Fabric

Esta función devuelve el valor del conjunto de valores de un grupo en función de la especificación de ordenación y percentil proporcionada. Dado que se trata de una función aproximada, el resultado estaría dentro de un límite de error basado en rangos con cierta confianza. Como este percentil aproximado se basa en una distribución discreta de los valores de columna, el valor de salida sería igual a uno de los valores específicos de la columna. Esta función se puede usar como alternativa a PERCENTILE_DISC para grandes conjuntos de datos en los que un error insignificante con respuesta más rápida es aceptable en comparación con un valor de percentil preciso con un tiempo de respuesta lento.

Convenciones de sintaxis de Transact-SQL

Sintaxis

APPROX_PERCENTILE_DISC (numeric_literal)  
WITHIN GROUP (ORDER BY order_by_expression [ASC|DESC])

Argumento

numeric_literal

El percentil que se va a calcular. El valor debe estar entre 0,0 y 1,0. para calcular el percentil 10, el valor pasado sería 0,10.

order_by_expression

Especifica una lista de valores para ordenar y cuyo percentil se va a calcular. El criterio de ordenación predeterminado es ascendente (ASC).  Solo se permiten tipos de datos numéricos. La expresión necesita dar como resultado un tipo numérico exacto o aproximado admitido, y no se permiten otros tipos de datos. Los tipos numéricos exactos admitidos son int, bigint, smallint, tinyint, bit, smallmoney y money. Los tipos numéricos aproximados admitidos son float y real. No se admiten tipos de datos decimal y float.

Tipos de valores devueltos

El tipo de valor devuelto viene determinado por el tipo order_by_expression.

Observaciones

Se omite cualquier valor NULL del conjunto de datos.

Las funciones de percentil aproximadas usan boceto KLL. El boceto se crea leyendo el flujo de datos.

Esta función proporciona garantías de error basadas en rangos no basadas en valor. La implementación de la función garantiza una tasa de error de hasta 1,33 % dentro de una probabilidad del 99 %.

Comportamientos conocidos

  • Es posible que la salida de las funciones no sea la misma en todas las ejecuciones. El algoritmo utilizado para estas funciones es un boceto KLL que es un algoritmo aleatorio. Cada vez que se compila el boceto, se seleccionan los valores aleatorios. Estas funciones proporcionan garantías de error basadas en rangos no basadas en valor.

  • La implementación de la función garantiza límites de error de hasta 1,33 % dentro de una confianza del 99 %.

Soporte de compatibilidad

En el nivel de compatibilidad 110 y posteriores, WITHIN GROUP es una palabra clave reservada. Para obtener más información, consulte Nivel de compatibilidad de ALTER DATABASE (Transact-SQL).

Ejemplos

En el ejemplo siguiente se crea una tabla, se rellena y se ejecuta la consulta de ejemplo.

SET NOCOUNT ON
GO
DROP TABLE IF EXISTS tblEmployee
GO
CREATE TABLE tblEmployee (
EmplId INT IDENTITY(1,1) PRIMARY KEY CLUSTERED,
DeptId INT,
Salary int);
GO
INSERT INTO tblEmployee
VALUES (1, 31),(1, 33), (1, 18), (2, 25),(2, 35),(2, 10), (2, 10),(3,1), (3,NULL), (4,NULL), (4,NULL)
GO
SELECT DeptId,
APPROX_PERCENTILE_DISC(0.10) WITHIN GROUP(ORDER BY Salary) AS 'P10',
APPROX_PERCENTILE_DISC(0.90) WITHIN GROUP(ORDER BY Salary) AS 'P90'
FROM tblEmployee
GROUP BY DeptId