Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a:SQL Server
Database SQL di Azure
Istanza gestita di SQL di Azure
Azure Synapse Analytics
Piattaforma di analisi (PDW)
Endpoint di analisi SQL in Microsoft Fabric
Magazzino in Microsoft Fabric
Database SQL in Microsoft Fabric
Calcola un percentile specifico per i valori ordinati in un intero set di righe o all'interno di partizioni distinte di un set di righe in SQL Server. Per un determinato valore percentile P, PERCENTILE_DISC ordina i valori dell'espressione ORDER BY nella clausola . Restituisce quindi il valore con il valore più CUME_DIST piccolo specificato (rispetto alla stessa specifica di ordinamento) maggiore o uguale a P. Ad esempio, PERCENTILE_DISC (0.5) calcola il 50° percentile (ovvero la median) di un'espressione.
PERCENTILE_DISC calcola il percentile in base a una distribuzione discreta dei valori di colonna. Restituisce un risultato uguale a un valore specifico nella colonna.
Convenzioni relative alla sintassi Transact-SQL
Sintassi
PERCENTILE_DISC ( numeric_literal ) WITHIN GROUP ( ORDER BY order_by_expression [ ASC | DESC ] )
OVER ( [ <partition_by_clause> ] )
Argomenti
literal
Percentile da calcolare. Il valore deve essere compreso tra 0 e 1.
ALL'INTERNO DEL GRUPPO ( ORDINE PER order_by_expression [ASC | DESC ] )
Specifica un elenco di valori in base a cui ordinare e calcolare il percentile. È consentito un solo order_by_expression. Per impostazione predefinita, l'ordinamento è crescente. L'elenco dei valori può essere di uno qualsiasi dei tipi di dati validi per l'operazione di ordinamento.
CAMBIO ( <partition_by_clause> )
Divide il FROM set di risultati della clausola in partizioni. A queste partizioni viene applicata la funzione di percentile. Per altre informazioni, vedere clausola SELECT - OVER. La <clausola ORDER BY e >la clausola<> rows o range non possono essere specificate in una PERCENTILE_DISC funzione.
Tipi restituiti
Il tipo restituito viene determinato dal tipo di order_by_expression.
Informazioni sulla compatibilità
Con il livello di compatibilità 110 e superiore, WITHIN GROUP è una parola chiave riservata. Per altre informazioni, vedere Livello di compatibilità ALTER DATABASE.
Osservazioni:
Tutti i valori Null nel set di dati vengono ignorati.
PERCENTILE_DISC è non deterministico. Per altre informazioni, vedere Funzioni deterministiche e non deterministiche.
Esempi
Esempio della sintassi di base
L'esempio seguente usa PERCENTILE_CONT e PERCENTILE_DISC per trovare lo stipendio mediano di ogni reparto. Potrebbero non restituire lo stesso valore:
-
PERCENTILE_CONTrestituisce il valore appropriato, anche se non esiste nel set di dati. -
PERCENTILE_DISCrestituisce un valore set effettivo.
USE AdventureWorks2022;
SELECT DISTINCT Name AS DepartmentName,
PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY ph.Rate) OVER (PARTITION BY Name) AS MedianCont,
PERCENTILE_DISC(0.5) WITHIN GROUP (ORDER BY ph.Rate) OVER (PARTITION BY Name) AS MedianDisc
FROM HumanResources.Department AS d
INNER JOIN HumanResources.EmployeeDepartmentHistory AS dh
ON dh.DepartmentID = d.DepartmentID
INNER JOIN HumanResources.EmployeePayHistory AS ph
ON ph.BusinessEntityID = dh.BusinessEntityID
WHERE dh.EndDate IS NULL;
Ecco un set di risultati parziale.
DepartmentName MedianCont MedianDisc
Document Control 16.8269 16.8269
Engineering 34.375 32.6923
Executive 54.32695 48.5577
Human Resources 17.427850 16.5865
Esempi: Azure Synapse Analytics e Piattaforma di strumenti analitici (PDW)
Esempio della sintassi di base
L'esempio seguente usa PERCENTILE_CONT e PERCENTILE_DISC per trovare lo stipendio mediano di ogni reparto. Potrebbero non restituire lo stesso valore:
-
PERCENTILE_CONTrestituisce il valore appropriato, anche se non esiste nel set di dati. -
PERCENTILE_DISCrestituisce un valore set effettivo.
-- Uses AdventureWorks
SELECT DISTINCT DepartmentName,
PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY BaseRate) OVER (PARTITION BY DepartmentName) AS MedianCont,
PERCENTILE_DISC(0.5) WITHIN GROUP (ORDER BY BaseRate) OVER (PARTITION BY DepartmentName) AS MedianDisc
FROM dbo.DimEmployee;
Ecco un set di risultati parziale.
DepartmentName MedianCont MedianDisc
-------------------- ---------- ----------
Document Control 16.826900 16.8269
Engineering 34.375000 32.6923
Human Resources 17.427850 16.5865
Shipping and Receiving 9.250000 9.0000