Condividi tramite


APPROX_PERCENTILE_CONT (Transact-SQL)

Si applica a: endpoint di analisi SQL Server 2022 (16.x) database SQL di Azure Istanza gestita di SQL di Azure SQL in Microsoft FabricWarehouse in Microsoft Fabric

Questa funzione restituisce un valore interpolato approssimativo di un set di valori di un gruppo in base al valore di percentile e all'ordinamento specificati. Poiché si tratta di una funzione approssimativa, l'output si trova entro un limite di un errore classificato con una considerevole attendibilità. Il valore percentile restituito da questa funzione si basa su una distribuzione continua dei valori di colonna e il risultato viene interpolato. Per questo motivo, l'output potrebbe non essere uno dei valori incluso nel set di dati. Uno dei principali casi d'uso di questa funzione consiste nella capacità di evitare gli outlier dei dati. Questa funzione può essere usata come alternativa alla funzione PERCENTILE_CONT per set di dati di grandi dimensioni in cui è preferibile un errore trascurabile restituito più rapidamente rispetto a un valore percentile accurato con un tempo di risposta maggiore.

Convenzioni di sintassi Transact-SQL

Sintassi

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

Argomento

numeric_literal

Percentile da calcolare. Il valore deve essere compreso tra 0 e 1.

order_by_expression

Specifica un elenco di valori numerici per ordinare e calcolare il percentile. È consentito un solo order_by_expression. Per impostazione predefinita, l'ordinamento è crescente.  L'espressione deve restituire un tipo numerico esatto o approssimato, con nessun altro tipo di dati consentito. I tipi numerici esatti sono int, bigint, smallint, tinyint, numeric, bit, decimal, smallmoney e money. I tipi numerici approssimati sono float e real.

Tipi restituiti

float(53)

Osservazioni:

Tutti i valori Null nel set di dati vengono ignorati.

Le funzioni percentile approssimative usano lo sketch KLL. Lo sketch viene compilato tramite la lettura del flusso di dati. A causa dell'algoritmo usato, questa funzione richiede meno memoria rispetto alla controparte non approssimativa (PERCENTILE_CONT).

Questa funzione fornisce garanzie di errore basate su classificazione, non su valori. L'implementazione della funzione garantisce un tasso di errore fino al 1,33%.

Comportamenti noti

  • L'output della funzione potrebbe non essere uguale in tutte le esecuzioni. L'algoritmo usato per queste funzioni è lo sketch KLL, che è un algoritmo casuale. Ogni volta che viene compilato lo sketch, vengono selezionati valori casuali. Queste funzioni forniscono garanzie di errore basate su classificazione, non su valori.
  • L'implementazione della funzione garantisce un limite di errore fino all'1,33% con un'attendibilità del 99%.

Informazioni sulla compatibilità

Se il valore del livello di compatibilità è 110 o superiore, WITHIN GROUP è una parola chiave riservata. Per altre informazioni, vedere Livello di compatibilità ALTER DATABASE (Transact-SQL).

Esempi

Nell'esempio seguente viene creata e popolata una tabella ed eseguita una query di esempio.

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;