APPROX_PERCENTILE_DISC (Transact-SQL)

Область применения: конечная точка аналитики SQL Server 2022 (16.x) База данных SQL Azure Управляемый экземпляр SQL Azure SQL в хранилище Microsoft Fabricв Microsoft Fabric

Эта функция возвращает значение из набора значений в группе на основе предоставленного процентиля и спецификации сортировки. Так как это приблизительная функция, результат будет находиться в пределах ошибки, основанной на ранге, с определенным доверительным уровнем. Так как этот приблизительный процентиль основан на дискретном распределении значений столбца, выходное значение будет равно одному из конкретных значений в столбце. Эту функцию можно использовать в качестве альтернативы PERCENTILE_DISC для больших наборов данных, где приемлема незначительная ошибка с более быстрым откликом по сравнению с точным значением процентиля с медленным откликом.

Соглашения о синтаксисе Transact-SQL

Синтаксис

APPROX_PERCENTILE_DISC (numeric_literal)  
WITHIN GROUP (ORDER BY order_by_expression [ASC|DESC])

Аргумент

numeric_literal

Процентиль, который необходимо вычислить. Значение должно находиться в диапазоне от 0.0 до 1,0. Для расчета 10-го процентиля переданное значение будет равно 0,10.

order_by_expression

Указывает список значений, который следует отсортировать и по которому будет вычисляться процентиль. По умолчанию задан порядок сортировки по возрастанию (ASC).  Допускаются только числовые типы данных. Выражение должно оцениваться до поддерживаемого точного или приблизительного числового типа без разрешенных других типов данных. Поддерживаются точные числовые типы: int, bigint, smallint, tinyint, bit, smallmoney и money. Поддерживаемые приблизительные числовые типы — float и real. Десятичные и плавающие типы данных не поддерживаются.

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

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

Замечания

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

Приблизительные функции процентиля используют эскиз KLL. Эскиз создается путем чтения потока данных.

Эта функция обеспечивает гарантии ошибок на основе ранга, а не значения. Реализация функции гарантирует погрешность до 1,33 % с вероятностью 99 %.

Известные модели поведения

  • Выходные данные функций могут не совпадать во всех выполнениях. Для этих функций используется эскиз KLL, представляющий собой случайный алгоритм. При каждом создании эскиза выбираются случайные значения. Эти функции обеспечивают гарантии ошибок на основе ранга, а не значения.

  • Реализация функции гарантирует погрешность до 1,33 % в пределах достоверности 99 %.

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

При уровне совместимости 110 и выше WITHIN GROUP является зарезервированным ключевым словом. Дополнительные сведения см. в разделе Уровень совместимости ALTER DATABASE (Transact-SQL).

Примеры

В следующем примере создается и заполняется таблица, а также выполняется выборка запроса.

SET NOCOUNT ON
GO
DROP TABLE IF EXISTS tblEmployee
GO
CREATE TABLE tblEmployee (
EmplId INT IDENTITY(1,1) PRIMARY KEY CLUSTERED,
DeptId INT,
Salary int);
GO
INSERT INTO tblEmployee
VALUES (1, 31),(1, 33), (1, 18), (2, 25),(2, 35),(2, 10), (2, 10),(3,1), (3,NULL), (4,NULL), (4,NULL)
GO
SELECT DeptId,
APPROX_PERCENTILE_DISC(0.10) WITHIN GROUP(ORDER BY Salary) AS 'P10',
APPROX_PERCENTILE_DISC(0.90) WITHIN GROUP(ORDER BY Salary) AS 'P90'
FROM tblEmployee
GROUP BY DeptId