Freigeben über


PERCENTILE_CONT (Transact-SQL)

Berechnet ein Quantil auf Grundlage einer kontinuierlichen Verteilung des Spaltenwerts in SQL Server 2012. Das Ergebnis wird interpoliert und stimmt möglicherweise mit keinem der konkreten Werte in der Spalte überein.

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

Syntax

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

Argumente

  • numeric_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. Der Ausdruck muss einen exakten numerischen Typ (int, bigint, smallint, tinyint, numeric, bit, decimal, smallmoney, money) oder einen ungefähren numerischen Typ (float, real) ergeben. Andere Datentypen sind nicht 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> der OVER-Syntax können nicht in einer PERCENTILE_CONT-Funktion angegeben werden.

Rückgabetypen

float(53)

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_DISC (Transact-SQL)