APPROX_MEDIAN (Transact-SQL)

Применимо к:Конечная точка аналитики SQL в Microsoft Fabric и хранилище в Microsoft Fabric

APPROX_MEDIAN Функция возвращает приблизительную медиану, или 50-й процентиль, нечисловыхNULL значений. Ее можно использовать как агрегатную функцию, так и функцию окна (аналитика):

  • Совокупное использование: Возвращает приблизительную медиану для всей группы.
  • Использование окна: возвращает приблизительную медиану для каждого раздела при сохранении выхода на уровне строки.

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

Syntax

Синтаксис функции агрегирования:

APPROX_MEDIAN ( numeric_expression )

Синтаксис функции аналитики:

APPROX_MEDIAN ( numeric_expression ) OVER ( [ <partition_by_clause> ] )

Аргументы

numeric_expression

Числовое выражение, приблизительная медиана которого вычисляется. Поддерживаемые точные числовые типы — int, bigint, smallint, numericsmallmoneytinyintdecimalи .money Поддерживаемые приближённые числовые типы — это float и real.

Предложение OVER

Partition_by_clause делит результирующий набор, созданный FROM предложением, на секции, и функция применяется к каждой секции.

Если не указать partition_by_clause, функция рассматривает все строки набора результатов запроса как одну порцию.

Оговорка OVER не поддерживает ORDER BY, ROWS, или RANGE для APPROX_MEDIAN.

Дополнительные сведения см. в предложении SELECT - OVER (Transact-SQL).

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

Возвращает float(53).

Замечания

APPROX_MEDIAN оценивает непрерывный 50-й процентиль упорядоченных невходныхNULL значений. Используйте MEDIAN , когда вам нужен точный результат.

Приблизительные результаты могут немного отличаться от точных MEDIAN и различаться между выполнениями из-за планов исполнения и параллельных путей слияния. Функция APPROX_MEDIAN не детерминирована. Дополнительные сведения см. в разделе детерминированные и недетерминированные функции.

NULL значения игнорируются. Если все входные значения равны NULL, или если ни одна строка не подходит, APPROX_MEDIAN возвращает NULL. Когда ANSI_WARNINGS , ONустранение NULL значений даёт стандартное агрегированное предупреждение.

APPROX_MEDIAN предназначен для снижения задержки и использования памяти по сравнению с точными MEDIAN вычислениями на больших наборах данных.

DISTINCT не поддерживается. Выражения персонажей, даты, времени и времени не поддерживаются.

Функция APPROX_MEDIAN доступна в Fabric Data Warehouse и в конечной точке аналитики SQL Fabric элементов. Эта APPROX_MEDIAN функция не поддерживается в SQL Server, База данных SQL Azure, Управляемый экземпляр SQL Azure или SQL Database in Fabric.

Сценарий использования

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

Examples

A. Вычислите приблизительную медиану совокупности

В этом примере оценивается медиана восьми значений.

SELECT APPROX_MEDIAN(value) AS ApproxMedianValue
FROM (VALUES (1), (2), (3), (4), (5), (6), (7), (8)) AS t(value);

Результат близок к точной медиане , 4.5но может немного варьироваться.

B. Вычислите приблизительную медиану для каждой группы

В этом примере оценивается медианная сумма заказа для каждого региона продаж.

WITH SalesOrders AS (
    SELECT *
    FROM (VALUES
        ('North', 120.00),
        ('North', 220.00),
        ('North', 320.00),
        ('South', 150.00),
        ('South', 250.00),
        ('South', 450.00)
    ) AS v(region, order_amount)
)
SELECT
    region,
    APPROX_MEDIAN(order_amount) AS ApproxMedianOrderAmount
FROM SalesOrders
GROUP BY region;

C. Игнорировать значения NULL

В этом примере NULL значения игнорируются при оценке медианы.

SELECT APPROX_MEDIAN(value) AS ApproxMedianValue
FROM (VALUES (1), (2), (NULL), (3), (4)) AS t(value);

Если каждое входное значение равно NULL, функция возвращает NULL.

D. Вычислите приблизительную медиану разделённого окна

Этот пример добавляет приблизительную медианную задержку для каждого сервиса к каждой строке запроса.

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,
    APPROX_MEDIAN(latency_ms) OVER (PARTITION BY service) AS ServiceApproxMedianLatency
FROM ServiceLatency;