Megosztás a következőn keresztül:


PERCENTILE_CONT (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példányAzure Synapse AnalyticsElemzési platformrendszer (PDW)SQL Analytics-végpont a Microsoft FabricbenRaktár a Microsoft FabricbenSQL-adatbázis a Microsoft Fabricben

Percentilis számítása az oszlopérték folyamatos eloszlása alapján az SQL Server Database Engine-ben. Az eredmény interpolált, és nem feltétlenül egyezik az oszlopban lévő konkrét értékekkel.

Transact-SQL szintaxis konvenciók

Szemantika

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

Arguments

numeric_literal

A kiszámítandó percentilis. Az értéknek és között kell változnia 0.01.0.

CSOPORTON BELÜL ( order_by_expression SORRENDBEN )

Numerikus értékek listáját adja meg a percentilis rendezéséhez és kiszámításához. Csak egy order_by_expression engedélyezett. A kifejezésnek pontos vagy hozzávetőleges numerikus típusra kell kiértékelnie, más adattípusok nem engedélyezettek. A pontos numerikus típusok: int, bigint, smallint, tinyint, numeric, bit, decimal, smallmoney és money. A közelítő numerikus típusok a lebegő és valós típusok. Az alapértelmezett rendezési sorrend növekvő.

VÉGE ( <partition_by_clause> )

A klauzula által generált FROM eredményhalmazt osztja partíciókra, amelyekre a percentilis függvényt alkalmazzák. További információért lásd: SELECT - OVER klauzula. A ORDER BY szintaxis és és klaulauda <rows or range clause>OVER nem lehet megadni egy PERCENTILE_CONT függvényben.

Visszatérési típusok

float(53)

Kompatibilitási támogatás

WITHIN GROUP egy fenntartott kulcsszó, amely a kompatibilitási szinttől 110kezdve . További információért lásd: ALTER DATABASE Kompatibilitási Szint.

Megjegyzések

Az adathalmazban lévő null értékek figyelmen kívül lesznek hagyva.

PERCENTILE_CONT nemdeterminista. További információ: Determinisztikus és Nemdeterminista függvények.

Példák

A cikkben szereplő kódminták a AdventureWorks2025 vagy AdventureWorksDW2025 mintaadatbázist használják, amelyet a Microsoft SQL Server-minták és közösségi projektek kezdőlapjáról tölthet le.

A. Keresd meg a medián munkavállalói fizetést osztályonként

Az alábbi példa a PERCENTILE_CONT medián PERCENTILE_DISC munkavállalói fizetés megtalálására szolgál az egyes osztályoknál. Ezek a függvények nem feltétlenül adják ugyanazt az értéket. PERCENTILE_CONT interpolálja a megfelelő értéket, amely létezhet vagy nem létezhet az adathalmazban, miközben PERCENTILE_DISC mindig tényleges értéket ad vissza a halmazból.

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;

Íme egy részleges eredményhalmaz.

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éldák: Azure Synapse Analytics and Analytics Platform System (PDW)

A következő példa a AdventureWorksDW2012 mintaadatbázist használja.

B. Keresd meg a medián munkavállalói fizetést osztályonként

Az alábbi példa a PERCENTILE_CONT medián PERCENTILE_DISC munkavállalói fizetés megtalálására szolgál az egyes osztályoknál. Ezek a függvények nem feltétlenül adják ugyanazt az értéket. PERCENTILE_CONT interpolálja a megfelelő értéket, amely létezhet vagy nem létezhet az adathalmazban, miközben PERCENTILE_DISC mindig tényleges értéket ad vissza a halmazból.

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;

Íme egy részleges eredményhalmaz.

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