PERCENTILE_CONT (Transact-SQL)
Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure конечной точке аналитики платформы Аналитики Azure Synapse Analytics (PDW) в Microsoft Fabric Хранилище в Microsoft Fabric
Вычисляет процентиль на основе непрерывного распределения значения столбца в ядро СУБД SQL Server. Результат интерполируется и может не совпадать с определенными значениями в столбце.
Соглашения о синтаксисе Transact-SQL
Синтаксис
PERCENTILE_CONT ( numeric_literal )
WITHIN GROUP ( ORDER BY order_by_expression [ ASC | DESC ] )
OVER ( [ <partition_by_clause> ] )
Аргументы
numeric_literal
Процентиль, который необходимо вычислить. Значение должно находиться в диапазоне от 0.0
и 1.0
.
WITHIN GROUP (ORDER BY ORDER_BY_EXPRESSION )
Указывает список числовых значений, который следует отсортировать и по которому будет вычисляться процентиль. Разрешен только один аргумент order_by_expression. Результатом вычисления выражения должен быть точный или приблизительный числовой тип. Другие типы данных недопустимы. Точными числовыми типами являются int, bigint, smallint, tinyint, numeric, bit, decimal, smallmoney и money. Приблизительными числовыми типами являются float и real. По умолчанию задан порядок сортировки по возрастанию.
OVER ( <partition_by_clause> )
Делит результирующий набор, созданный FROM
предложением, на секции, к которым применяется функция процентиля. Дополнительные сведения см. в предложении SELECT — OVER. Предложение ORDER BY
и <rows or range clause>
OVER
синтаксис не могут быть указаны в PERCENTILE_CONT
функции.
Типы возвращаемых данных
float(53)
Поддержка совместимости
WITHIN GROUP
— это зарезервированное ключевое слово, начиная с уровня 110
совместимости. Дополнительные сведения см. в статье Уровень совместимости инструкции ALTER DATABASE (Transact-SQL).
Замечания
Все значения NULL, имеющиеся в наборе данных, игнорируются.
Функция PERCENTILE_CONT
не детерминирована. Дополнительные сведения см. в разделе Deterministic and Nondeterministic Functions.
Примеры
Примеры кода Transact-SQL в этой статье используют AdventureWorks2022
базу данных или AdventureWorksDW2022
пример базы данных, которую можно скачать с домашней страницы примеров и проектов сообщества Microsoft SQL Server.
А. Поиск зарплаты сотрудников медиана на отдел
В следующем примере используется и PERCENTILE_DISC
выполняется PERCENTILE_CONT
поиск заработной платы сотрудника медиана в каждом отделе. Эти функции могут не возвращать то же значение. PERCENTILE_CONT
интерполирует соответствующее значение, которое может или не существовать в наборе данных, в то время как PERCENTILE_DISC
всегда возвращает фактическое значение из набора.
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;
Далее представлен частичный результирующий набор.
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
Примеры: Azure Synapse Analytics и система платформы аналитики (PDW)
В следующем примере используется AdventureWorksDW2012
пример базы данных.
B. Поиск зарплаты сотрудников медиана на отдел
В следующем примере используется и PERCENTILE_DISC
выполняется PERCENTILE_CONT
поиск заработной платы сотрудника медиана в каждом отделе. Эти функции могут не возвращать то же значение. PERCENTILE_CONT
интерполирует соответствующее значение, которое может или не существовать в наборе данных, в то время как PERCENTILE_DISC
всегда возвращает фактическое значение из набора.
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;
Далее представлен частичный результирующий набор.
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