Sdílet prostřednictvím


PERCENTILE_CONT (Transact-SQL)

Platí pro:SQL ServerAzure SQL DatabaseSpravovaná instance Azure SQLAzure Synapse AnalyticsAnalytics Platform System (PDW)Koncový bod analýzy SQL v Microsoft FabricSklad v Microsoft FabricDatabáze SQL v Microsoft Fabric

Vypočítá percentil založený na spojitém rozdělení hodnoty sloupce v databázovém enginu SQL Serveru. Výsledek je interpolován a nemusí odpovídat žádné konkrétní hodnotě ve sloupci.

Transact-SQL konvence syntaxe

Syntaxe

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

Arguments

numeric_literal

Percentil, který se má vypočítat. Hodnota musí být mezi 0.0 a .1.0

UVNITŘ SKUPINY ( POŘADÍ PODLE order_by_expression)

Určuje seznam číselných hodnot pro řazení a výpočet percentilu. Je povolen pouze jeden order_by_expression . Výraz musí být vyhodnocen jako přesný nebo přibližný číselný typ bez povolených jiných datových typů. Přesné číselné typy jsou int, bigint, smallint, tinyint, numeric, bit, decimal, smallmoney a money. Přibližné číselné typy jsou plovoucí a reálné. Výchozí pořadí řazení je vzestupné.

KONEC ( <partition_by_clause> )

Rozdělí množinu výsledků vytvořenou klauzulí FROM na partace, na které je aplikována percentilová funkce. Pro více informací viz VYBRAT - OVER Clause. Klauzule ORDER BY a <rows or range clause>OVER syntaxe nelze ve PERCENTILE_CONT funkci specifikovat.

Návratové typy

Float(53)

Podpora kompatibility

WITHIN GROUP je rezervované klíčové slovo, začíná na úrovni 110kompatibility . Pro více informací viz ALTER DATABASE Compatibility Level.

Poznámky

Všechny hodnoty null v sadě dat se ignorují.

PERCENTILE_CONT je nedeterministické. Další informace naleznete v tématu Deterministické a nedeterministické funkce.

Examples

Ukázky kódu v tomto článku používají ukázkovou databázi AdventureWorks2025 nebo AdventureWorksDW2025, kterou si můžete stáhnout z domovské stránky Microsoft SQL Serveru pro ukázky a komunitní projekty .

A. Najděte medián platu zaměstnance podle oddělení

Následující příklad používá PERCENTILE_CONT a k nalezení PERCENTILE_DISC mediánu mzdy zaměstnanců v každém oddělení. Tyto funkce nemusí vracet stejnou hodnotu. PERCENTILE_CONT interpoluje odpovídající hodnotu, která může, ale nemusí v datové sadě existovat, přičemž PERCENTILE_DISC vždy vrací skutečnou hodnotu z této množiny.

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;

Tady je částečná sada výsledků.

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

Příklady: Azure Synapse Analytics a Analytický platformový systém (PDW)

Následující příklad využívá vzorovou databázi AdventureWorksDW2012 .

B. Najděte medián platu zaměstnance podle oddělení

Následující příklad používá PERCENTILE_CONT a k nalezení PERCENTILE_DISC mediánu mzdy zaměstnanců v každém oddělení. Tyto funkce nemusí vracet stejnou hodnotu. PERCENTILE_CONT interpoluje odpovídající hodnotu, která může, ale nemusí v datové sadě existovat, přičemž PERCENTILE_DISC vždy vrací skutečnou hodnotu z této množiny.

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;

Tady je částečná sada výsledků.

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