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


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

См. также

PERCENTILE_CONT (Transact-SQL)