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


PERCENTILE_DISC (Transact-SQL)

Применимо к:SQL ServerБаза данных Azure SQLУправляемый экземпляр Azure SQLAzure Synapse AnalyticsСистема платформы аналитики (PDW)Конечная точка SQL аналитики в Microsoft FabricХранилище в Microsoft FabricБаза данных SQL в Microsoft Fabric

Вычисляет определенный процентиль для отсортированных значений во всем наборе строк или в разных секциях набора строк в SQL Server. Для заданного значения процентиля PPERCENTILE_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.

IN GROUP (ORDER BY order_by_expression [ ASC | DESC ] )

Указывает список значений, который следует отсортировать и по которому будет вычисляться процентиль. Разрешен только один аргумент order_by_expression. По умолчанию задан порядок сортировки по возрастанию. Список значений может быть любого из типов данных, которые допустимы для операции сортировки.

ПРИЁМ ( <partition_by_clause> )

Делит FROM результирующий набор предложения на секции. к которым применяется функция вычисления процентиля. Дополнительные сведения см. в предложении SELECT - OVER. Предложение <ORDER BY> и строки или <предложение>диапазона не может быть указано в PERCENTILE_DISC функции.

Типы возвращаемых данных

Тип возвращаемого значения определяется типом order_by_expression.

Поддержка совместимости

В разделе уровня совместимости 110 и выше WITHIN GROUP используется зарезервированное ключевое слово. Дополнительные сведения см. на уровне совместимости ALTER DATABASE.

Замечания

Все значения NULL, имеющиеся в наборе данных, игнорируются.

PERCENTILE_DISC недетерминирован. Дополнительные сведения см. в разделе детерминированные и недетерминированные функции.

Примеры

Пример простого синтаксиса

В следующем примере используется и 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