PERCENTILE_DISC (Transact-SQL)
Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure конечной точке аналитики платформы Аналитики Azure Synapse Analytics (PDW) в Microsoft Fabric Хранилище в Microsoft Fabric
Вычисляет определенный процентиль для отсортированных значений во всем наборе строк или в разных секциях набора строк в SQL Server. Для данного значения процентиля P функция PERCENTILE_DISC сортирует значения выражения в предложении ORDER BY. Затем он возвращает значение с наименьшим CUME_DIST заданным значением (в отношении той же спецификации сортировки), которое больше или равно P. Например, PERCENTILE_DISC (0,5) вычисляет 50-й процентиль (то есть медиан) выражения. Функция PERCENTILE_DISC вычисляет процентиль на основе дискретного распределения значений столбца. Результат вычисления равен определенному значению из столбца.
Соглашения о синтаксисе Transact-SQL
Синтаксис
PERCENTILE_DISC ( numeric_literal ) WITHIN GROUP ( ORDER BY order_by_expression [ ASC | DESC ] )
OVER ( [ <partition_by_clause> ] )
Аргументы
literal
Процентиль, который необходимо вычислить. Значение должно находиться в диапазоне от 0.0 до 1,0.
WITHIN GROUP ( ORDER BY order_by_expression [ ASC | DESC)**
Указывает список значений, который следует отсортировать и по которому будет вычисляться процентиль. Разрешен только один аргумент order_by_expression. По умолчанию задан порядок сортировки по возрастанию. Список значений может быть любого из типов данных, которые допустимы для операции сортировки.
OVER (<partition_by_clause>)**
Разделяет результирующий набор предложения FROM на секции, к которым применяется функция вычисления процентиля. Дополнительные сведения см. в статье Предложение OVER (Transact-SQL). В функции PERCENTILE_DISC нельзя указывать <предложение ORDER BY>, а также <предложения строк или диапазонов>.
Типы возвращаемых данных
Тип возвращаемого значения определяется типом order_by_expression.
Поддержка совместимости
При уровне совместимости 110 и выше WITHIN GROUP является зарезервированным ключевым словом. Дополнительные сведения см. в разделе Уровень совместимости ALTER DATABASE (Transact-SQL).
Общие замечания
Все значения NULL, имеющиеся в наборе данных, игнорируются.
Функция PERCENTILE_DISC не детерминирована. Дополнительные сведения см. в разделе Deterministic and Nondeterministic Functions.
Примеры
Пример простого синтаксиса
В следующем примере функции PERCENTILE_CONT и PERCENTILE_DISC используются для определения медианной заработной платы сотрудников в каждом отделе. Они могут возвращать только разные значения.
- Функция PERCENTILE_CONT возвращает соответствующее значение, даже если оно не существует в наборе данных.
- Функция PERCENTILE_DISC возвращает фактическое значение набора.
USE AdventureWorks2022;
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)
Пример простого синтаксиса
В следующем примере функции PERCENTILE_CONT и PERCENTILE_DISC используются для определения медианной заработной платы сотрудников в каждом отделе. Они могут возвращать только разные значения.
- Функция PERCENTILE_CONT возвращает соответствующее значение, даже если оно не существует в наборе данных.
- Функция PERCENTILE_DISC возвращает фактическое значение набора.
-- Uses AdventureWorks
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