Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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;