PERCENTILE_DISC (Transact-SQL)

Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW) SQL Analytics-Endpunkt in Microsoft Fabric Warehouse in Microsoft Fabric

Berechnet für sortierte Werte in einem gesamten Rowset oder innerhalb bestimmter Partitionen eines Rowsets in SQL Server ein bestimmtes Quantil. Für den angegebenen Quantilwert sortiert P, PERCENTILE_DISC die Ausdruckswerte in der ORDER BY-Klausel. Es wird dann der Wert mit dem kleinsten angegebenen CUME_DIST-Wert (in Bezug auf die gleiche Sortierspezifikation) zurückgegeben, der größer oder gleich P ist. Beispiel: PERCENTILE_DISC (0.5) berechnet das 50. Quantil (d.h. den Mittelwert) eines Ausdrucks. PERCENTILE_DISC berechnet das Quantil auf Grundlage einer diskreten Verteilung der Spaltenwerte. Das Ergebnis entspricht einem bestimmten Wert in der Spalte.

Transact-SQL-Syntaxkonventionen

Syntax

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

Argumente

literal
Das zu berechnende Quantil. Der Wert muss zwischen 0,0 und 1,0 liegen.

WITHIN GROUP ( ORDER BY order_by_expression [ ASC | DESC)**
Gibt eine Liste von numerischen Werten für die Sortierung und Berechnung des Quantils an. Es ist nur ein order_by_expression-Element zulässig. Standardmäßig wird die Sortierung in aufsteigender Reihenfolge vorgenommen. Die Liste der Werte kann von einem beliebigen Datentyp sein, der für den Sortierungsvorgang gültig sein kann.

OVER (<partition_by_clause>)**
Teilt die Ergebnisse der FROM-Klausel in Partitionen. Die Quantilfunktion wird auf diese Partitionen angewendet. Weitere Informationen finden Sie unter OVER-Klausel (Transact-SQL). Die <ORDER BY-Klausel> und die <Zeilen- oder Bereichsklausel> können nicht in einer PERCENTILE_DISC-Funktion angegeben werden.

Rückgabetypen

Der Rückgabetyp wird durch den order_by_expression-Typ bestimmt.

Kompatibilitätsunterstützung

Unter Kompatibilitätsgrad 110 und höher ist WITHIN GROUP ein reserviertes Schlüsselwort. Weitere Informationen finden Sie unter ALTER DATABASE-Kompatibilitätsgrad (Transact-SQL).

Allgemeine Hinweise

Alle NULL-Werte im Dataset werden ignoriert.

PERCENTILE_DISC ist nicht deterministisch. Weitere Informationen finden Sie unter Deterministic and Nondeterministic Functions.

Beispiele

Einfaches Syntaxbeispiel

Im folgenden Beispiel wird das durchschnittliche Mitarbeitergehalt in jeder Abteilung mithilfe von PERCENTILE_CONT und PERCENTILE_DISC ermittelt. Sie geben möglicherweise nicht den gleichen Wert zurück:

  • PERCENTILE_CONT gibt den entsprechenden Wert zurück, auch wenn er im Datenset nicht vorhanden ist.
  • PERCENTILE_DISC gibt einen tatsächlich festgelegten Wert zurück.
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;  

Dies ist ein Auszug aus dem Resultset.

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

Beispiele: Azure Synapse Analytics und Analytics-Plattformsystem (PDW)

Einfaches Syntaxbeispiel

Im folgenden Beispiel wird das durchschnittliche Mitarbeitergehalt in jeder Abteilung mithilfe von PERCENTILE_CONT und PERCENTILE_DISC ermittelt. Sie geben möglicherweise nicht den gleichen Wert zurück:

  • PERCENTILE_CONT gibt den entsprechenden Wert zurück, auch wenn er im Datenset nicht vorhanden ist.
  • PERCENTILE_DISC gibt einen tatsächlich festgelegten Wert zurück.
-- 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;  

Dies ist ein Auszug aus dem Resultset.

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

Weitere Informationen

PERCENTILE_CONT (Transact-SQL)