PERCENTILE_CONT (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 ein Quantil basierend auf einer fortlaufenden Verteilung des Spaltenwerts in der SQL Server-Datenbank-Engine. Das Ergebnis wird interpoliert und entspricht möglicherweise keinem der spezifischen Werte in der Spalte.
Transact-SQL-Syntaxkonventionen
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
.
WITHIN GROUP ( ORDER BY order_by_expression )
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. Der Ausdruck muss einen exakten oder ungefähren numerischen Typ ergeben. Andere Datentypen sind nicht zulässig. Die exakten numerischen Typen sind int, bigint, smallint, tinyint, numeric, bit, decimal, smallmoney und money. Die ungefähren numerischen Typen sind float und real. Standardmäßig wird die Sortierung in aufsteigender Reihenfolge vorgenommen.
OVER ( <partition_by_clause> )
Dividiert das von der FROM
Klausel erzeugte Resultset in Partitionen, auf die die Quantilfunktion angewendet wird. Weitere Informationen finden Sie unter SELECT - OVER-Klausel. Die ORDER BY
Klausel und <rows or range clause>
die OVER
Syntax können in einer PERCENTILE_CONT
Funktion nicht angegeben werden.
Rückgabetypen
float(53)
Kompatibilitätsunterstützung
WITHIN GROUP
ist ein reserviertes Schlüsselwort, beginnend mit der Kompatibilitätsstufe 110
. Weitere Informationen finden Sie unter ALTER DATABASE-Kompatibilitätsgrad.
Hinweise
Alle NULL-Werte im Dataset werden ignoriert.
PERCENTILE_CONT
ist nicht deterministisch. Weitere Informationen finden Sie unter Deterministic and Nondeterministic Functions.
Beispiele
Die Transact-SQL-Codebeispiele in diesem Artikel verwenden die AdventureWorks2022
- oder AdventureWorksDW2022
-Beispieldatenbank, die Sie von der Homepage Microsoft SQL Server Samples and Community Projects herunterladen können.
A. Ermitteln des medianen Mitarbeitergehalts pro Abteilung
Im folgenden Beispiel wird das gehalt der medianen Mitarbeiter in den einzelnen Abteilungen verwendet PERCENTILE_CONT
und PERCENTILE_DISC
gesucht. Diese Funktionen geben möglicherweise nicht denselben Wert zurück. PERCENTILE_CONT
interpoliert den entsprechenden Wert, der möglicherweise im Dataset vorhanden ist oder nicht, während PERCENTILE_DISC
immer ein tatsächlicher Wert aus der Menge zurückgegeben wird.
USE AdventureWorks2022;
GO
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)
Im folgenden Beispiel wird die AdventureWorksDW2012
Beispieldatenbank verwendet.
B. Ermitteln des medianen Mitarbeitergehalts pro Abteilung
Im folgenden Beispiel wird das gehalt der medianen Mitarbeiter in den einzelnen Abteilungen verwendet PERCENTILE_CONT
und PERCENTILE_DISC
gesucht. Diese Funktionen geben möglicherweise nicht denselben Wert zurück. PERCENTILE_CONT
interpoliert den entsprechenden Wert, der möglicherweise im Dataset vorhanden ist oder nicht, während PERCENTILE_DISC
immer ein tatsächlicher Wert aus der Menge zurückgegeben wird.
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