Udostępnij za pomocą


PERCENTILE_CONT (Transact-SQL)

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Punkt końcowy analizy SQL w usłudze Microsoft FabricHurtownia danych w usłudze Microsoft FabricBaza danych SQL w usłudze Microsoft Fabric

Oblicza percentyl na podstawie ciągłego rozkładu wartości kolumny w silniku bazy danych SQL Server. Wynik jest interpolowany i może nie odpowiadać żadnej z konkretnych wartości w kolumnie.

Transact-SQL konwencje składni

Składnia

PERCENTILE_CONT ( numeric_literal )
    WITHIN GROUP ( ORDER BY order_by_expression [ ASC | DESC ] )
    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.

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 ALTER DATABASE Compatibility Level.

Uwagi

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 w tym artykule korzystają z przykładowej bazy danych AdventureWorks2025 lub AdventureWorksDW2025, którą można pobrać ze strony głównej Przykładów programu Microsoft SQL Server i projektów społeczności.

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 and Analytics Platform System (PDW)

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