Partilhar via


APPROX_PERCENTILE_DISC (Transact-SQL)

Aplica-se a: SQL Server 2022 (16.x) Azure SQL Database AzureSQL ManagedInstance SQL Analytics endpoint em Microsoft FabricWarehouse em Microsoft FabricSQL database em Microsoft Fabric

Esta função retorna o valor do conjunto de valores em um grupo com base no percentil fornecido e na especificação de classificação. Uma vez que esta é uma função aproximada, a saída estaria dentro do erro baseado em classificação vinculado com certa confiança. Como esse percentil aproximado é baseado em uma distribuição discreta dos valores da coluna, o valor de saída seria igual a um dos valores específicos na coluna. Esta função pode ser usada como uma alternativa ao PERCENTILE_DISC para grandes conjuntos de dados onde um erro insignificante com resposta mais rápida é aceitável em comparação com o valor de percentil preciso com tempo de resposta lento.

Transact-SQL convenções de sintaxe

Sintaxe

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

Argumento

numeric_literal

O percentil a calcular. O valor deve variar entre 0,0 e 1,0. Para calcular o percentil 10, o valor passado seria 0,10.

order_by_expression

Especifica uma lista de valores para classificar e calcular o percentil. A ordem de classificação padrão é crescente (ASC). Apenas tipos de dados numéricos são permitidos. A expressão deve ser avaliada para um tipo numérico exato ou aproximado suportado, sem outros tipos de dados permitidos. Os tipos numéricos exatos suportados são int, bigint, smallint, tinyint, bit, smallmoney e money. Os tipos numéricos aproximados suportados são flutuantes e reais. Não há suporte para tipos de dados decimais e flutuantes.

Tipos de devolução

O tipo de retorno é determinado pelo tipo order_by_expression .

Observações

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

As funções de percentil aproximado usam o esboço da KLL. O esboço é construído através da leitura do fluxo de dados.

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

Comportamentos conhecidos

  • A saída das funções pode não ser a mesma em todas as execuções. O algoritmo usado para estas funções é KLL sketch que é um algoritmo aleatório. Toda vez que o esboço é construído, valores aleatórios são escolhidos. Essas funções fornecem garantias de erro baseadas em classificação, não baseadas em valor.

  • A implementação da função garante limites de erro de até 1,33% dentro de uma confiança de 99%.

Suporte de compatibilidade

No nível de compatibilidade 110 e superior, WITHIN GROUP é uma palavra-chave reservada. Para obter mais informações, consulte ALTER DATABASE Compatibility Level (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_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