Condividi tramite


APPROX_PERCENTILE_DISC (Transact-SQL)

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

Questa funzione restituisce il valore di un set di valori di un gruppo in base alla 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à. Poiché questo percentile approssimativo si basa su una distribuzione discreta dei valori di colonna, il valore di output sarà uguale a uno dei valori specifici della colonna. Questa funzione può essere usata come alternativa alla funzione PERCENTILE_DISC 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 relative alla sintassi Transact-SQL

Sintassi

APPROX_PERCENTILE_DISC (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. per calcolare il 10° percentile, il valore passato sarebbe 0,10.

order_by_expression

Specifica un elenco di valori in base a cui ordinare e calcolare il percentile. Per impostazione predefinita, l'ordinamento è crescente. Sono consentiti solo tipi di dati numerici. L'espressione deve restituire un tipo numerico esatto o approssimativo supportato, senza altri tipi di dati consentiti. I tipi numerici esatti sono int, bigint, smallint, tinyint, bit, smallmoney, e money. I tipi numerici approssimati supportati sono float e real. Non sono invece supportati i tipi di dati decimal e float.

Tipi restituiti

Il tipo restituito viene determinato dal tipo di order_by_expression.

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.

Questa funzione fornisce garanzie di errore basate su classificazione, non su valori. L'implementazione della funzione garantisce un tasso di errore fino all'1,33% con una probabilità del 99%.

Comportamenti noti

  • L'output delle funzioni 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 la 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_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