PERCENTILE_DISC (Transact-SQL)

Gilt für:SQL ServerAzure SQL-DatenbankVerwaltete Azure SQL-InstanzAzure Synapse AnalyticsSQL-Analyseendpunkt in Microsoft FabricLagerhaus in Microsoft FabricSQL-Datenbank in Microsoft Fabric

Die PERCENTILE_DISC Funktion berechnet einen bestimmten Perzentil für sortierte Werte in einem gesamten Zeilensatz oder innerhalb der unterschiedlichen Partitionen eines Zeilensatzes. Bei einem bestimmten Quantilwert PPERCENTILE_DISC werden die Ausdruckswerte in der ORDER BY Klausel sortiert. Anschließend wird der Wert mit dem kleinsten CUME_DIST angegebenen Wert (in Bezug auf dieselbe Sortierspezifikation) zurückgegeben, der größer oder gleich P ist. Berechnet z. B PERCENTILE_DISC (0.5) . das 50. Quantil (d. h. den Median) eines Ausdrucks. PERCENTILE_DISC berechnet das Quantil basierend auf einer diskreten Verteilung der Spaltenwerte. Das Ergebnis entspricht einem bestimmten Wert in der Spalte.

Transact-SQL-Syntaxkonventionen

Syntax

Syntax der Aggregationsfunktion:

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

Analysefunktionssyntax:

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.

INNERHALB DER GRUPPE ( BESTELLUNG NACH 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.

ÜBER ( <partition_by_clause> )

Dividiert das Resultset der FROM Klausel in Partitionen. Die Quantilfunktion wird auf diese Partitionen angewendet. Weitere Informationen finden Sie unter SELECT - OVER-Klausel. Die <ORDER BY-Klausel> und <Zeilen oder Bereichsklausel>können in einer PERCENTILE_DISC Funktion nicht angegeben werden.

Note

Die Klausel OVER ist in Fabric Data Warehouse und im SQL-Analytics-Endpunkt optional. PERCENTILE_DISC kann entweder in aggregierter oder analytischer (Fenster-)Form verwendet werden.

Rückgabetypen

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

Kompatibilitätsunterstützung

Unter Kompatibilitätsebene 110 und höher WITHIN GROUP ist ein reserviertes Schlüsselwort. Weitere Informationen finden Sie unter ALTER DATABASE Kompatibilitätsstufe.

Bemerkungen

Alle NULL-Werte im Dataset werden ignoriert.

PERCENTILE_DISC ist nicht deterministisch. Weitere Informationen finden Sie unter Deterministische und nichtdeterministische Funktionen.

Die aggregierte Form von PERCENTILE_DISC, die die Klausel OVER weglässt, wird in SQL Server, Azure SQL-Datenbank, Azure SQL Managed Instance oder SQL-Datenbank in Fabric nicht unterstützt.

Beispiele

Einfaches Syntaxbeispiel

Im folgenden Beispiel wird das Mediangehalt der einzelnen Abteilungen verwendet PERCENTILE_CONT und PERCENTILE_DISC gesucht. Möglicherweise geben sie nicht denselben Wert zurück:

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

Hier ist ein partielles 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

Einfaches Syntaxbeispiel

Im folgenden Beispiel wird das Mediangehalt der einzelnen Abteilungen verwendet PERCENTILE_CONT und PERCENTILE_DISC gesucht. Möglicherweise geben sie nicht denselben Wert zurück:

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

Hier ist ein partielles 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