PERCENTILE_DISC (Transact-SQL)

Вычисляет определенный процентиль для отсортированных значений из всего набора строк или в пределах определенных секций набора строк в SQL Server 2012. Для данного значения процентиля P функция PERCENTILE_DISC сортирует значения выражения из предложения ORDER BY и возвращает значение с наименьшим значением CUME_DIST (в отношении той же спецификации сортировки), которое больше или равно значению P. Например, функция PERCENTILE_DISC (0.5) вычислит 50-й процентиль (то есть медиану) выражения. Функция PERCENTILE_DISC вычисляет процентиль на основе дискретного распределения значений столбца. Результат вычисления равен определенному значению из столбца.

Значок ссылки на раздел Синтаксические обозначения в Transact-SQL (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_CONT и PERCENTILE_DISC используются для определения медианной заработной платы сотрудников в каждом отделе. Обратите внимание на то, что эти функции могут возвращать разные значения. Это происходит потому, что функция PERCENTILE_CONT интерполирует соответствующее значение независимо от того, существует ли оно в наборе данных, тогда как функция PERCENTILE_DISC всегда возвращает фактически существующее в наборе значение.

USE AdventureWorks2012;

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

См. также

Справочник

PERCENTILE_CONT (Transact-SQL)