APPROX_PERCENTILE_CONT (Transact-SQL)

Aplica-se a: SQL Server 2022 (16.x) Banco de Dados SQL do AzureInstância Gerenciada de SQL do AzurePonto de extremidade de análises SQL no Microsoft FabricWarehouse no Microsoft Fabric

Esta função retorna um valor interpolado aproximado do conjunto de valores em um grupo com base no valor do percentil e na especificação de classificação. Como essa é uma função aproximada, a saída estaria dentro do erro baseado em classificação associado a determinada confiança. O valor do percentil retornado por essa função baseia-se em uma distribuição contínua dos valores da coluna e o resultado seria interpolado. Devido a isso, a saída pode não ser um dos valores no conjunto de dados. Um dos casos de uso comuns para essa função é evitar as exceções de dados. Essa função pode ser usada como uma alternativa para PERCENTILE_CONT para grandes conjuntos de dados em que um erro insignificante com resposta mais rápida é aceitável em comparação com um valor de percentil preciso com tempo de resposta lento.

Convenções da sintaxe Transact-SQL

Sintaxe

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

Argumento

numeric_literal

O percentil a ser computado. O valor deve variar entre 0,0 e 1,0.

order_by_expression

Especifica uma lista de valores numéricos sobre os quais classificar e computar o percentil. Apenas uma order_by_expression é permitida. A ordem de classificação padrão é crescente (ASC).  A expressão precisa avaliar a um tipo numérico exato ou aproximado, nenhum outro tipo de dados sendo permitido. Os tipos numéricos exatos são: int, bigint, smallint, tinyint, numeric, bit, decimal, smallmoney e money. Os tipos numéricos aproximados são float e real.

Tipos de retorno

float(53)

Comentários

Todos os nulos do conjunto de dados são ignorados.

Funções de percentil aproximado usam esboço KLL. O esboço é criado lendo o fluxo de dados. Devido ao algoritmo usado, essa função requer menos memória do que seu equivalente não aproximado (PERCENTILE_CONT).

Essa função fornece garantias de erro baseadas em classificação não baseadas em valor. A implementação da função garante uma taxa de erro de até 1,33%.

Comportamentos conhecidos

  • A saída da função pode não ser a mesma em todas as execuções. O algoritmo usado para essas funções é o esboço KLL, que é um algoritmo randomizado. Sempre que o esboço é criado, são escolhidos valores aleatórios. Essas funções fornecem garantias de erro baseadas em classificação não baseadas em valor.
  • A implementação da função garante um limite de erro de até 1,33% em uma confiança de 99%.

Suporte de compatibilidade

Sob o nível de compatibilidade 110 e superior, WITHIN GROUP é uma palavra-chave reservada. Para obter mais informações, confira Nível de compatibilidade de ALTER DATABASE (Transact-SQL).

Exemplos

O exemplo a seguir cria uma tabela, preenche-a e executa a consulta de exemplo.

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;