Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применимо к:Конечная точка аналитики SQL в Microsoft Fabric и хранилище в Microsoft Fabric
Функция QUANTILE возвращает точный непрерывный квантиль нечисловыхNULL значений. Ее можно использовать как агрегатную функцию, так и функцию окна (аналитика):
- Совокупное использование: возвращает запрошенный квантиль для всей группы.
- Использование окна: возвращает запрошенный квантиль для каждого раздела, сохраняя выход на уровне строки.
Соглашения о синтаксисе Transact-SQL
Syntax
Синтаксис функции агрегирования:
QUANTILE ( numeric_literal , numeric_expression )
Синтаксис функции аналитики:
QUANTILE ( numeric_literal , numeric_expression ) OVER ( [ <partition_by_clause> ] )
Аргументы
numeric_literal
Квантиль для вычисления. Значение должно находиться в инклюзивном диапазоне от 0.0 до 1.0. Например, укажите 0.5 , как вычислить медиану или 0.95 вычислить 95-й процентиль.
numeric_expression
Числовое выражение, квантиль которого вычисляется. Поддерживаемые точные числовые типы — int, bigint, smallint, numericsmallmoneytinyintdecimalи .money Поддерживаемые приближённые числовые типы — это float и real.
Предложение OVER
Partition_by_clause делит результирующий набор, созданный FROM предложением, на секции, и функция применяется к каждой секции.
Если не указать partition_by_clause, функция рассматривает все строки набора результатов запроса как одну порцию.
Оговорка OVER не поддерживает ORDER BY, ROWS, или RANGE для QUANTILE.
Дополнительные сведения см. в предложении SELECT - OVER (Transact-SQL).
Типы возвращаемых данных
Возвращает float(53).
Замечания
QUANTILE вычисляет непрерывный квантиль над упорядочёнными невходнымиNULL значениями. Когда запрашиваемый квантиль находится между двумя значениями, функция интерполирует между ними. Результат может не быть значением, существующим в входных строках.
Агрегатная форма эквивалентна QUANTILE(p, numeric_expression)PERCENTILE_CONT(p) WITHIN GROUP (ORDER BY numeric_expression). Аналитическая форма имеет эквивалентную процентильно-непрерывную семантику внутри каждого разбиения.
NULL значения игнорируются. Если все входные значения равны NULL, или если ни одна строка не подходит, QUANTILE возвращает NULL. Когда ANSI_WARNINGS , ONустранение NULL значений даёт стандартное агрегированное предупреждение.
Для тех же невходныхNULL значений и numeric_literal результат QUANTILE получается одинаково.
DISTINCT не поддерживается. Выражения персонажей, даты, времени и времени не поддерживаются.
Эта QUANTILE функция не поддерживается в SQL Server, База данных SQL Azure, Управляемый экземпляр SQL Azure или SQL Database in Fabric.
Сценарий использования
Используйте QUANTILE для вычисления квартилей, процентилей и других точных границ распределения с лаконичным синтаксисом. Например, рассчитать суммы претензий по p90 по плану, задержку сервиса p95 по регионам или значения Q1, медианы и Q3 для бизнес-метрики.
Examples
A. Вычисление агрегированных квантилей
В этом примере вычисляются первый квартиль, медиана, третий квартиль и 95-й перцентиль.
WITH Samples AS (
SELECT *
FROM (VALUES
(1), (NULL), (2), (3), (4), (5), (6), (7), (8), (13)
) AS v(value)
)
SELECT
QUANTILE(0.25, value) AS Q1_25thPercentile,
QUANTILE(0.50, value) AS Median_50thPercentile,
QUANTILE(0.75, value) AS Q3_75thPercentile,
QUANTILE(0.95, value) AS P95
FROM Samples;
B. Вычислите квантиль для каждой группы
В этом примере рассчитывается 90-я процентильная сумма претензий для каждого страхового плана.
WITH Claims AS (
SELECT *
FROM (VALUES
('Plan-A', 420.00),
('Plan-A', 500.00),
('Plan-A', 610.00),
('Plan-B', 250.00),
('Plan-B', 275.00),
('Plan-B', 310.00)
) AS v(plan_name, claim_amount)
)
SELECT
plan_name,
QUANTILE(0.90, claim_amount) AS P90ClaimAmount
FROM Claims
GROUP BY plan_name;
C. Возврат NULL для группы полностью NULL
Этот пример возвращается NULL , потому что все квалифицирующие значения равны NULL.
WITH CampaignDiscounts AS (
SELECT *
FROM (VALUES
(9001, NULL),
(9001, NULL),
(9001, NULL),
(9002, 10.00)
) AS v(campaign_id, discount_percent)
)
SELECT QUANTILE(0.90, discount_percent) AS P90DiscountPercent
FROM CampaignDiscounts
WHERE campaign_id = 9001;
D. Вычислите квантиль окна с разбиением
Этот пример добавляет 95-процентную задержку для каждого сервиса к каждой строке запроса.
WITH ServiceLatency AS (
SELECT *
FROM (VALUES
('Checkout', 'req-001', 180),
('Checkout', 'req-002', 220),
('Checkout', 'req-003', 260),
('Search', 'req-010', 90),
('Search', 'req-011', 110),
('Search', 'req-012', 130)
) AS v(service, request_id, latency_ms)
)
SELECT
service,
request_id,
latency_ms,
QUANTILE(0.95, latency_ms) OVER (PARTITION BY service) AS ServiceP95Latency
FROM ServiceLatency;