APPROX_PERCENTILE_CONT (Transact-SQL)

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

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

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

Синтаксис

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

Аргумент

numeric_literal

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

order_by_expression

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

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

float(53)

Замечания

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

Приблизительные функции процентиля используют эскиз KLL. Эскиз создается путем чтения потока данных. Из-за используемого алгоритма этой функции требуется меньше памяти, чем ее неприблизительному аналогу (PERCENTILE_CONT).

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

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

  • Выходные данные функции могут не совпадать во всех выполнениях. Для этих функций используется эскиз 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_CONT(0.10) WITHIN GROUP(ORDER BY Salary) AS 'P10',
APPROX_PERCENTILE_CONT(0.90) WITHIN GROUP(ORDER BY Salary) AS 'P90'
FROM tblEmployee
GROUP BY DeptId;