Поделиться через


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