PERCENTILE_CONT (Transact-SQL)

Si applica a:SQL ServerDatabase SQL di AzureIstanza gestita di SQL di AzureAzure Synapse AnalyticsEndpoint di analisi SQL in Microsoft FabricMagazzino in Microsoft FabricDatabase SQL in Microsoft Fabric

La PERCENTILE_CONT funzione calcola un percentile basato su 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

Sintassi della funzione di aggregazione:

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

Sintassi della funzione analitica:

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

Argomenti

numeric_literal

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

ALL'INTERNO DEL GRUPPO ( ORDINE PER 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.

CAMBIO ( <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.

Note

La OVER clausola è opzionale in Fabric Data Warehouse e nell'endpoint di analisi SQL. PERCENTILE_CONT può essere usato sia in forma aggregata che analitica (finestre).

Tipi restituiti

float(53)

Informazioni sulla compatibilità

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

Osservazioni:

La forma aggregata di PERCENTILE_CONT, che omette la OVER clausola, non è supportata in SQL Server, database SQL di Azure, Istanza gestita di SQL di Azure o database SQL in Fabric.

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 in questo articolo utilizzano il AdventureWorks2025, AdventureWorksDW2025, o AdventureWorksLT2025 database di esempi, che puoi scaricare dal repository GitHub Azure Data SQL Samples Repository.

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

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