APPROX_PERCENTILE_CONT (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 un valor interpolado aproximado del conjunto de valores de un grupo basado en el valor de percentil y la especificación de ordenación. 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. El valor de percentil devuelto por esta función se basa en una distribución continua de los valores de columna, y el resultado se interpolaría. Debido a esto, es posible que la salida no sea uno de los valores del conjunto de datos. Uno de los casos de uso comunes de esta función es evitar los valores atípicos de datos. Esta función se puede usar como alternativa a PERCENTILE_CONT 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_CONT (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.

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. El criterio de ordenación predeterminado es ascendente (ASC).  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.

Tipos de valores devueltos

float(53)

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. Debido al algoritmo usado, esta función requiere menos memoria que su homólogo no aproximado (PERCENTILE_CONT).

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

Comportamientos conocidos

  • Es posible que la salida de la función 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 una 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_CONT(0.10) WITHIN GROUP(ORDER BY Salary) AS 'P10',
APPROX_PERCENTILE_CONT(0.90) WITHIN GROUP(ORDER BY Salary) AS 'P90'
FROM tblEmployee
GROUP BY DeptId;