PERCENTILE_CONT (Transact-SQL)

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsEndpoint analityki SQL w Microsoft FabricMagazyn w Microsoft FabricBaza danych SQL w Microsoft Fabric

Funkcja oblicza PERCENTILE_CONT percentyl na podstawie ciągłego rozkładu wartości kolumny w SQL Server Database Engine. Wynik jest interpolowany i może nie odpowiadać żadnej z konkretnych wartości w kolumnie.

Transact-SQL konwencje składni

Składnia

Składnia funkcji agregacji:

PERCENTILE_CONT ( numeric_literal )
    WITHIN GROUP ( ORDER BY order_by_expression [ ASC | DESC ] )

Składnia funkcji analitycznej:

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

Arguments

numeric_literal

Percentyl do obliczenia. Wartość musi mieścić się między 0.0 a .1.0

W OBRĘBIE GRUPY ( UPORZĄDKOWANY WEDŁUG order_by_expression )

Określa listę wartości liczbowych do sortowania i obliczania percentylu. Dozwolone jest tylko jedno order_by_expression . Wyrażenie musi zostać obliczone na dokładny lub przybliżony typ liczbowy bez dozwolonych innych typów danych. Dokładne typy liczbowe to int, bigint, smallint, tinyint, numeric,bit, decimal,smallmoney oraz money. Przybliżone typy numeryczne to float i rzeczywiste. Domyślna kolejność sortowania jest rosnąca.

KONIEC ( <partition_by_clause> )

Dzieli zbiór wyników wytworzony przez klauzulę FROM na podziały, do których stosuje się funkcję percentylową. Więcej informacji można znaleźć w SELECT - OVER Clause. Klauzula ORDER BY i <rows or range clause>OVER składni nie może być określona w PERCENTILE_CONT funkcji.

Note

Klauzula ta OVER jest opcjonalna w Fabric Data Warehouse oraz w endpointzie analityki SQL. PERCENTILE_CONT może być używany zarówno w formie agregatycznej, jak i analitycznej (okienkowej).

Typy zwracane

Float(53)

Obsługa zgodności

WITHIN GROUP jest zarezerwowanym słowem kluczowym, zaczynającym się od poziomu 110zgodności . Więcej informacji można znaleźć w artykuleALTER DATABASE Poziom kompatybilności.

Uwagi

Agregowana forma PERCENTILE_CONT, która pomija klauzulęOVER, nie jest obsługiwana w SQL Server, Azure SQL Database, Azure SQL Managed Instance ani bazie danych SQL w Fabric.

Wszystkie wartości null w zestawie danych są ignorowane.

PERCENTILE_CONT jest niedeterministyczny. Aby uzyskać więcej informacji, zobacz Funkcje deterministyczne i niedeterministyczne.

Przykłady

Przykłady kodu opisane w tym artykule korzystają z przykładowej bazy AdventureWorks2025 ORAdventureWorksDW2025, którą można pobrać z repozytorium Azure Data SQL Samples Repository GitHub.

A. Znajdź medianę wynagrodzenia pracownika w poszczególnych działach

Poniższy przykład wykorzystuje PERCENTILE_CONT i PERCENTILE_DISC do znalezienia mediany wynagrodzenia pracowników w każdym dziale. Te funkcje mogą nie zwracać tej samej wartości. PERCENTILE_CONT interpoluje odpowiednią wartość, która może istnieć lub nie w zbiorze danych, jednocześnie zawsze PERCENTILE_DISC zwracając rzeczywistą wartość ze zbioru.

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;

Oto zestaw wyników częściowych.

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

Przykłady: Azure Synapse Analytics

Poniższy przykład wykorzystuje bazę AdventureWorksDW2012 danych próbek.

B. Znajdź medianę wynagrodzenia pracownika w poszczególnych działach

Poniższy przykład wykorzystuje PERCENTILE_CONT i PERCENTILE_DISC do znalezienia mediany wynagrodzenia pracowników w każdym dziale. Te funkcje mogą nie zwracać tej samej wartości. PERCENTILE_CONT interpoluje odpowiednią wartość, która może istnieć lub nie w zbiorze danych, jednocześnie zawsze PERCENTILE_DISC zwracając rzeczywistą wartość ze zbioru.

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;

Oto zestaw wyników częściowych.

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