APPROX_MEDIAN (Transact-SQL)

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

Funkcja APPROX_MEDIAN zwraca przybliżoną 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 przybliżoną medianę dla całej grupy.
  • Wykorzystanie okna: Zwraca przybliżoną medianę dla każdej partycji, zachowując wynik na poziomie wiersza.

Transact-SQL konwencje składni

Syntax

Składnia funkcji agregacji:

APPROX_MEDIAN ( numeric_expression )

Składnia funkcji analitycznej:

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

Arguments

numeric_expression

Wyrażenie liczbowe, którego przybliżona mediana jest obliczana. Obsługiwane dokładne typy numeryczne to int, bigint, smallint, tinyintnumeric, , decimal, , 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 APPROX_MEDIAN.

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

Typy zwracane

Zwraca wartość float(53).

Remarks

APPROX_MEDIAN szacuje ciągły 50. percentyl uporządkowanych wartości niewejściowychNULL . Używaj MEDIAN , gdy potrzebujesz dokładnego wyniku.

Przybliżone wyniki mogą nieznacznie różnić się od wyników dokładnych MEDIAN i mogą się różnić w zależności od wykonania ze względu na plany wykonania i równoległe ścieżki scalania. APPROX_MEDIAN jest niedeterministyczny. Aby uzyskać więcej informacji, zobacz funkcje deterministyczne i niedeterministyczne.

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

APPROX_MEDIAN ma na celu zmniejszenie opóźnień i zużycia pamięci w porównaniu z dokładnymi MEDIAN obliczeniami na dużych zbiorach danych.

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

Funkcja ta APPROX_MEDIAN jest dostępna w Fabric Data Warehouse oraz w endpointze analityki SQL dla Fabric elementów. Funkcja ta APPROX_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

Zastosowanie APPROX_MEDIAN do dużych pulpitów nawigatorskich, analiz eksploracyjnych i raportowania grupowego, gdzie wystarczająca jest dokładna szacunkowa forma, a wydajność zapytań ma większe znaczenie niż dokładna mediana. Typowe przykłady to przybliżona mediana wartości zamówienia, opóźnienia usługi oraz pomiary telemetryczne.

Examples

Odp. Oblicz przybliżoną medianę zagregowaną

Ten przykład szacuje medianę ośmiu wartości.

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

Wynik jest bliski dokładnej medianie , 4.5ale może się nieznacznie różnić.

B. Oblicz przybliżoną medianę dla każdej grupy

Ten przykład szacuje 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,
    APPROX_MEDIAN(order_amount) AS ApproxMedianOrderAmount
FROM SalesOrders
GROUP BY region;

C. Ignoruj wartości NULL

Ten przykład ignoruje NULL wartości podczas szacowania mediany.

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

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

D. Oblicz przybliżoną medianę podzielonego okna

Ten przykład dodaje przybliżoną 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,
    APPROX_MEDIAN(latency_ms) OVER (PARTITION BY service) AS ServiceApproxMedianLatency
FROM ServiceLatency;