Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro:Koncový bod analýzy SQL v Microsoft Fabric a Warehouse v Microsoft Fabric
Funkce MEDIAN vrací přesný medián, tedy 50. percentil, nenumerickýchNULL hodnot. Můžete ji použít jako agregační funkci i funkci okna (analýzy):
- Agregované použití: Vrátí medián pro celou skupinu.
- Využití okna: Vrátí medián pro každou partition při zachování výstupu na úrovni řádku.
Syntaxe
Syntaxe agregační funkce:
MEDIAN ( numeric_expression )
Syntaxe analytické funkce:
MEDIAN ( numeric_expression ) OVER ( [ <partition_by_clause> ] )
Argumenty
numeric_expression
Číselný výraz, jehož medián je vypočítán. Podporované přesné numerické typy jsou int, bigint, smallint, tinyint, numeric, decimal, bit, , smallmoneya .money Podporované přibližné numerické typy jsou float a .real
Klauzule OVER
Partition_by_clause rozdělí sadu výsledků vytvořenou FROM klauzulí na oddíly a funkce se použije na každý oddíl.
Pokud partition_by_clause nespecifikujete, funkce považuje všechny řádky z množiny výsledků dotazu jako jednu partition.
Klauzule OVER nepodporuje ORDER BY, ROWS, ani RANGE pro MEDIAN.
Další informace naleznete v tématu SELECT - OVER klauzule (Transact-SQL).
Návratové typy
Vrátí float(53).
Remarks
MEDIAN vypočítá spojitý 50. percentil uspořádaných nevstupníchNULL hodnot. Pro sudý počet vstupních hodnot funkce interpoluje mezi dvěma prostředními hodnotami. Výsledkem nemusí být hodnota, která by existovala ve vstupních řádcích.
MEDIAN je ekvivalentní pro PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY numeric_expression) agregované použití. Analytická forma má ekvivalentní percentilově spojitou sémantiku v rámci každé části.
NULL hodnoty jsou ignorovány. Pokud jsou všechny vstupní hodnoty , NULLnebo pokud žádné řádky nesplňují podmínky, MEDIAN vrátí NULL. Když ANSI_WARNINGS je , ONodstranění NULL hodnot vytváří standardní agregované varování.
MEDIAN je nedeterministický, protože výpočty s plovoucí desetinnou čárkou v paralelních cestách mohou způsobit mírné odchylky. Další informace naleznete v tématu Deterministické a nedeterministické funkce.
DISTINCT není podporováno. Znaky, datum, čas a datum a datum nejsou podporovány.
Funkce MEDIAN je dostupná v Fabric Data Warehouse a jako SQL analytics endpoint Fabric položek. Tato MEDIAN funkce není podporována v SQL Server, Azure SQL Database, Azure SQL Managed Instance ani v SQL databázi ve Fabric.
Případ použití
Použijte MEDIAN v případech, kdy může být průměr zkreslen neobvykle vysokými nebo nízkými hodnotami. Například medián objednávky, doba odezvy nebo výše nároku často představují typické pozorování jasněji než aritmetický průměr. Agregovaný formulář shrnuje skupiny a analytický formulář přidává benchmark rozdělení ke každému řádku detailu.
Examples
A. Vypočítejte agregovaný medián
Tento příklad vrací medián osmi hodnot. Protože vstup má sudý počet řádků, MEDIAN interpoluje mezi 4 a 5.
SELECT MEDIAN(value) AS MedianValue
FROM (VALUES (1), (2), (3), (4), (5), (6), (7), (8)) AS t(value);
Výsledek je 4.5.
B. Vypočítejte medián pro každou skupinu
Tento příklad vypočítává medián objednávky pro každý prodejní region.
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. Ignorujte hodnoty NULL
Tento příklad ignoruje NULL vstup a vypočítá medián ze zbývajících hodnot.
SELECT MEDIAN(value) AS MedianValue
FROM (VALUES (1), (2), (NULL), (3), (4)) AS t(value);
Pokud je každá vstupní hodnota , NULLfunkce vrací NULL.
D. Vypočítejte medián rozděleného okna
Tento příklad přidává medián latence pro každou službu ke každému řádku požadavku.
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;