Freigeben über


PERCENTILE_DISC (Transact-SQL)

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

Themenlink (Symbol) Transact-SQL-Syntaxkonventionen (Transact-SQL)

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. Nur ein order_by_expression ist zulässig. Standardmäßig wird eine aufsteigende Sortierreihenfolge verwendet.

  • OVER ( <partition_by_clause> )
    Teilt das von der FROM-Klausel erzeugte Resultset in Partitionen, auf die die Quantilfunktion angewendet wird. 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

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

Kompatibilitätsunterstützung

Unter Kompatibilitätsgrad 110 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.

Beispiele

A.Einfaches Syntaxbeispiel

Im folgenden Beispiel wird das mittlere Mitarbeitergehalt in jeder Abteilung mithilfe von PERCENTILE_CONT und PERCENTILE_DISC ermittelt. Beachten Sie, dass diese Funktionen möglicherweise nicht den gleichen Wert zurückgeben. Ursache hierfür ist, dass PERCENTILE_CONT den korrekten Wert interpoliert, egal ob dieser im Dataset vorhanden ist, während PERCENTILE_DISC immer einen Istwert aus dem Dataset zurückgibt.

USE AdventureWorks2012;

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

Siehe auch

Verweis

PERCENTILE_CONT (Transact-SQL)