Condividi tramite


PERCENTILE_DISC (Transact-SQL)

Si applica a: SQL Server Database SQL di Azure Istanza gestita di SQL di Azure Azure Synapse Analytics Piattaforma di strumenti analitici (PDW) Endpoint di analisi SQL in Microsoft Fabric Warehouse 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 valore percentile specificato P, PERCENTILE_DISC ordina i valori dell'espressione nella clausola ORDER BY. Restituisce quindi il valore con il valore più piccolo CUME_DIST 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 della 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.

WITHIN GROUP ( ORDER BY 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.

OVER (<partition_by_clause>)**
Suddivide il set di risultati della clausola FROM in partizioni. A queste partizioni viene applicata la funzione di percentile. Per altre informazioni, vedere Clausola OVER (Transact-SQL). Non è possibile specificare le clausole <ORDER BY> e <ROWS o RANGE> in una funzione PERCENTILE_DISC.

Tipi restituiti

Il tipo restituito viene determinato dal tipo di order_by_expression.

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).

Osservazioni generali

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

Nell'esempio seguente vengono usate le funzioni PERCENTILE_CONT e PERCENTILE_DISC per trovare lo stipendio medio dei dipendenti in ogni reparto. È possibile che non restituiscano lo stesso valore:

  • PERCENTILE_CONT restituisce il valore corretto, anche se non esiste nel set di dati.
  • PERCENTILE_DISC restituisce un valore effettivo dal set.
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;  

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

Nell'esempio seguente vengono usate le funzioni PERCENTILE_CONT e PERCENTILE_DISC per trovare lo stipendio medio dei dipendenti in ogni reparto. È possibile che non restituiscano lo stesso valore:

  • PERCENTILE_CONT restituisce il valore corretto, anche se non esiste nel set di dati.
  • PERCENTILE_DISC restituisce un valore effettivo dal set.
-- 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;  

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

Vedi anche

PERCENTILE_CONT (Transact-SQL)