Condividi tramite


PERCENTILE_CONT (Transact-SQL)

Si applica a:SQL ServerDatabase SQL di AzureIstanza gestita di SQL di AzureAzure Synapse AnalyticsPiattaforma di strumenti analitici (PDW)Endpoint di analisi SQL in Microsoft FabricWarehouse in Microsoft Fabric

Calcola un percentile in base a una distribuzione continua del valore della colonna nel motore di database di SQL Server. Il risultato viene interpolato e potrebbe non essere uguale a uno dei valori specifici nella colonna.

Convenzioni relative alla sintassi Transact-SQL

Sintassi

PERCENTILE_CONT ( numeric_literal )
    WITHIN GROUP ( ORDER BY order_by_expression [ ASC | DESC ] )
    OVER ( [ <partition_by_clause> ] )

Nota

Per visualizzare la sintassi Transact-SQL per SQL Server 2014 (12.x) e versioni precedenti, vedere Documentazione delle versioni precedenti.

Argomenti

numeric_literal

Percentile da calcolare. Il valore deve essere compreso tra 0.0 e 1.0.

WITHIN GROUP ( ORDER BY order_by_expression )

Specifica un elenco di valori numerici per ordinare e calcolare il percentile. È consentito un solo order_by_expression. 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. Per impostazione predefinita, l'ordinamento è crescente.

OVER ( <partition_by_clause> )

Divide il set di risultati prodotto dalla FROM clausola in partizioni a cui viene applicata la funzione percentile. Per altre informazioni, vedere Clausola SELECT - OVER. La ORDER BY clausola e <rows or range clause> la OVER sintassi non possono essere specificate in una PERCENTILE_CONT funzione.

Tipi restituiti

float(53)

Informazioni sulla compatibilità

WITHIN GROUP è una parola chiave riservata, a partire dal livello 110di compatibilità . Per altre informazioni, vedere Livello di compatibilità ALTER DATABASE.

Osservazioni:

Tutti i valori Null nel set di dati vengono ignorati.

PERCENTILE_CONT è non deterministico. Per altre informazioni, vedere Funzioni deterministiche e non deterministiche.

Esempi

Gli esempi di codice Transact-SQL in questo articolo usano il AdventureWorks2022 database di esempio o AdventureWorksDW2022 , che è possibile scaricare dalla home page degli esempi di Microsoft SQL Server e dei progetti della community.

R. Trovare lo stipendio dei dipendenti mediani per reparto

Nell'esempio seguente viene PERCENTILE_CONT usato e PERCENTILE_DISC per trovare lo stipendio mediano dei dipendenti in ogni reparto. Queste funzioni potrebbero non restituire lo stesso valore. PERCENTILE_CONT interpola il valore appropriato, che potrebbe o potrebbe non esistere nel set di dati, mentre PERCENTILE_DISC restituisce sempre un valore effettivo dal set.

USE AdventureWorks2022;
GO

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;

Di seguito è riportato 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)

Nell'esempio seguente viene usato il AdventureWorksDW2012 database di esempio.

B. Trovare lo stipendio dei dipendenti mediani per reparto

Nell'esempio seguente viene PERCENTILE_CONT usato e PERCENTILE_DISC per trovare lo stipendio mediano dei dipendenti in ogni reparto. Queste funzioni potrebbero non restituire lo stesso valore. PERCENTILE_CONT interpola il valore appropriato, che potrebbe o potrebbe non esistere nel set di dati, mentre PERCENTILE_DISC restituisce sempre un valore effettivo dal set.

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;

Di seguito è riportato 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