MEDIANA (Transact-SQL)

Dotyczy:Punkt końcowy analizy SQL w usłudze Microsoft Fabric i magazynie w usłudze Microsoft Fabric

Funkcja MEDIAN zwraca dokładną medianę, czyli 50. percentyl, wartości nienumerycznychNULL . Można go użyć zarówno jako funkcji agregującej, jak i funkcji okna (analitycznego):

  • Zużycie agregatu: Zwraca medianę dla całej grupy.
  • Wykorzystanie okna: Zwraca medianę dla każdej partycji, zachowując wynik na poziomie wiersza.

Transact-SQL konwencje składni

Syntax

Składnia funkcji agregacji:

MEDIAN ( numeric_expression )

Składnia funkcji analitycznej:

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

Arguments

numeric_expression

Wyrażenie liczbowe, którego mediana jest obliczana. Obsługiwane dokładne typy numeryczne to int, bigint, smallint, tinyint, numeric, decimal, bit, , smallmoneyoraz .money Obsługiwane przybliżone typy numeryczne to float oraz .real

Klauzula OVER

Partition_by_clause dzieli zestaw wyników wygenerowany przez klauzulę FROM na partycje, a funkcja jest stosowana do każdej partycji.

Jeśli nie określisz partition_by_clause, funkcja traktuje wszystkie wiersze zbioru wyników zapytania jako jedną partycję.

Klauzula OVER nie wspiera ORDER BY, ROWS, ani RANGE dla MEDIAN.

Aby uzyskać więcej informacji, zobacz SELECT - OVER clause (Transact-SQL).

Typy zwracane

Zwraca wartość float(53).

Remarks

MEDIAN oblicza ciągły 50. percentyl uporządkowanych wartości niewejściowychNULL . Dla parzystej liczby wartości wejściowych funkcja interpoluje między dwoma wartościami środkowymi. Wynik może nie być wartością istniejącą w wierszach wejściowych.

MEDIAN jest równoważne dla PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY numeric_expression) użycia agregatowego. Forma analityczna posiada równoważną semantykę percentylowo-ciągłą w każdej partycji.

NULL wartości są ignorowane. Jeśli wszystkie wartości wejściowe są , NULLlub jeśli żaden wiersz nie spełnia kwalifikacji, MEDIAN zwraca NULL. Gdy ANSI_WARNINGS jest , ONeliminacja NULL wartości generuje standardowe ostrzeżenie agregatywne.

MEDIAN jest niedeterministyczna, ponieważ obliczenia zmiennoprzecinkowe na równoległych ścieżkach wykonania mogą powodować niewielkie różnice. Aby uzyskać więcej informacji, zobacz funkcje deterministyczne i niedeterministyczne.

DISTINCT nie jest obsługiwany. Nie są obsługiwane wyrażenia dotyczące postaci, daty, godziny i daty i godziny.

Funkcja ta MEDIAN jest dostępna w Fabric Data Warehouse oraz w endpointze analityki SQL dla Fabric elementów. Funkcja ta MEDIAN nie jest obsługiwana w SQL Server, Azure SQL Database, Azure SQL Managed Instance ani w bazie danych SQL w Fabric.

Przypadek użycia

Używaj, MEDIAN gdy średnia może być zniekształcona przez wyjątkowo wysokie lub niskie wartości. Na przykład mediana wartości zamówienia, czas reakcji lub kwota zgłoszenia często reprezentują typową obserwację wyraźniej niż średnia arytmetyczna. Forma agregowana podsumowuje grupy, a forma analityczna dodaje benchmark partycji do każdego wiersza szczegółowego.

Examples

Odp. Oblicz medianę łączną

Ten przykład zwraca medianę ośmiu wartości. Ponieważ wejście ma parzystą liczbę wierszy, MEDIAN interpoluje między 4 a 5.

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

Wynik to 4.5.

B. Oblicz medianę dla każdej grupy

Ten przykład oblicza medianę kwoty zamówienia dla każdego regionu sprzedaży.

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,
    MEDIAN(order_amount) AS MedianOrderAmount
FROM SalesOrders
GROUP BY region;

C. Ignoruj wartości NULL

Ten przykład ignoruje NULL dane wejściowe i oblicza medianę na podstawie pozostałych wartości.

SELECT MEDIAN(value) AS MedianValue
FROM (VALUES (1), (2), (NULL), (3), (4)) AS t(value);

Jeśli każda wartość wejściowa to NULL, funkcja zwraca NULL.

D. Oblicz medianę okna podzielonego

Ten przykład dodaje medianę opóźnienia dla każdej usługi do każdego wiersza żądania.

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