Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Punkt końcowy analizy SQL w usłudze Microsoft Fabric
Hurtownia danych w usłudze Microsoft Fabric
Baza 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