Delen via


PERCENTILE_CONT (Transact-SQL)

Van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL Analytics-eindpunt in Microsoft FabricMagazijn in Microsoft FabricSQL-database in Microsoft Fabric

Berekent een percentiel op basis van een continue verdeling van de kolomwaarde in de SQL Server Database Engine. Het resultaat is geïnterpoleerd en hoeft niet gelijk te zijn aan een van de specifieke waarden in de kolom.

Transact-SQL syntaxis-conventies

Syntaxis

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

Arguments

numeric_literal

Het percentiel dat moet worden berekend. De waarde moet variëren tussen 0.0 en 1.0.

BINNEN DE GROEP ( GEORDEND OP order_by_expression )

Hiermee geeft u een lijst met numerieke waarden om het percentiel te sorteren en te berekenen. Er is slechts één order_by_expression toegestaan. De expressie moet een exacte of geschatte numerieke waarde evalueren, zonder dat er andere gegevenstypen zijn toegestaan. Exacte numerieke types zijn int, bigint, smallint, tinyint, numeric, bit, decimaal, smallmoney en money. Geschatte numerieke types zijn float en reëel. De standaardsorteerdervolgorde is oplopend.

OVER ( <partition_by_clause> )

Verdeelt de door de FROM clausule geproduceerde resultaatset in partities waarop de percentielfunctie wordt toegepast. Voor meer informatie, zie SELECT - OVER Clause. De ORDER BY clausule en <rows or range clause> van de OVER syntaxis kunnen niet in een PERCENTILE_CONT functie worden gespecificeerd.

Retourtypen

float(53)

Compatibiliteitsondersteuning

WITHIN GROUP is een gereserveerd trefwoord, beginnend met compatibiliteitsniveau 110. Voor meer informatie, zie ALTER DATABASE Compatibiliteitsniveau.

Opmerkingen

Null-waarden in de gegevensset worden genegeerd.

PERCENTILE_CONT is niet-deterministisch. Zie Deterministische en niet-deterministische functies voor meer informatie.

Voorbeelden

De codevoorbeelden in dit artikel gebruiken de AdventureWorks2025 of AdventureWorksDW2025 voorbeelddatabase die u kunt downloaden van de startpagina van Microsoft SQL Server Samples en Community Projects .

Eén. Zoek het mediane salaris per afdeling

Het volgende voorbeeld gebruikt PERCENTILE_CONT en PERCENTILE_DISC om het mediane personeelssalaris in elke afdeling te vinden. Deze functies geven mogelijk niet dezelfde waarde terug. PERCENTILE_CONT interpoleert de juiste waarde, die wel of niet in de dataset kan bestaan, terwijl PERCENTILE_DISC altijd een daadwerkelijke waarde uit de set wordt teruggegeven.

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;

Hier volgt een gedeeltelijke resultatenset.

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

Voorbeelden: Azure Synapse Analytics and Analytics Platform System (PDW)

Het volgende voorbeeld gebruikt de AdventureWorksDW2012 voorbeelddatabase.

B. Zoek het mediane salaris per afdeling

Het volgende voorbeeld gebruikt PERCENTILE_CONT en PERCENTILE_DISC om het mediane personeelssalaris in elke afdeling te vinden. Deze functies geven mogelijk niet dezelfde waarde terug. PERCENTILE_CONT interpoleert de juiste waarde, die wel of niet in de dataset kan bestaan, terwijl PERCENTILE_DISC altijd een daadwerkelijke waarde uit de set wordt teruggegeven.

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 volgt een gedeeltelijke resultatenset.

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