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 APPROX_MEDIAN vrací přibližně medián, tedy 50. percentil, nenumerickýchNULL hodnot. Můžete ji použít jako agregační funkci i funkci okna (analýzy):
- Agregované využití: Vrátí přibližný medián pro celou skupinu.
- Využití okna: Vrátí přibližný medián pro každou partition při zachování výstupu na úrovni řádku.
Syntaxe
Syntaxe agregační funkce:
APPROX_MEDIAN ( numeric_expression )
Syntaxe analytické funkce:
APPROX_MEDIAN ( numeric_expression ) OVER ( [ <partition_by_clause> ] )
Argumenty
numeric_expression
Číselný výraz, jehož přibližný medián je vypočítán. Podporované přesné numerické typy jsou int, bigint, smallint, tinyint, numeric, decimal, , 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 APPROX_MEDIAN.
Další informace naleznete v tématu SELECT - OVER klauzule (Transact-SQL).
Návratové typy
Vrátí float(53).
Remarks
APPROX_MEDIAN odhaduje spojitý 50. percentil uspořádaných nevstupníchNULL hodnot. Použijte MEDIAN, když potřebujete přesný výsledek.
Přibližné výsledky se mohou mírně lišit od přesných MEDIAN výsledků a mohou se lišit mezi prováděními kvůli plánům a paralelním cestám sloučení.
APPROX_MEDIAN je nedeterministické. Další informace naleznete v tématu Deterministické a nedeterministické funkce.
NULL hodnoty jsou ignorovány. Pokud jsou všechny vstupní hodnoty , NULLnebo pokud žádné řádky nesplňují podmínky, APPROX_MEDIAN vrátí NULL. Když ANSI_WARNINGS je , ONodstranění NULL hodnot vytváří standardní agregované varování.
APPROX_MEDIAN je určen ke snížení latence a využití paměti ve srovnání s přesnými MEDIAN výpočty na velkých datových sadách.
DISTINCT není podporováno. Znaky, datum, čas a datum a datum nejsou podporovány.
Funkce APPROX_MEDIAN je dostupná v Fabric Data Warehouse a jako SQL analytics endpoint Fabric položek. Tato APPROX_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žití APPROX_MEDIAN pro rozsáhlé dashboardy, průzkumné analýzy a skupinové reporty, kde stačí těsný odhad a výkon dotazu je důležitější než přesný medián. Běžné příklady zahrnují přibližnou mediánovou hodnotu objednávky, latenci služby a měření telemetrie.
Examples
A. Vypočítejte agregovaný přibližný medián
Tento příklad odhaduje medián osmi hodnot.
SELECT APPROX_MEDIAN(value) AS ApproxMedianValue
FROM (VALUES (1), (2), (3), (4), (5), (6), (7), (8)) AS t(value);
Výsledek je blízký přesnému mediánu 4.5, ale může se mírně lišit.
B. Vypočítat přibližný medián pro každou skupinu
Tento příklad odhaduje 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,
APPROX_MEDIAN(order_amount) AS ApproxMedianOrderAmount
FROM SalesOrders
GROUP BY region;
C. Ignorujte hodnoty NULL
Tento příklad ignoruje NULL hodnoty při odhadu mediánu.
SELECT APPROX_MEDIAN(value) AS ApproxMedianValue
FROM (VALUES (1), (2), (NULL), (3), (4)) AS t(value);
Pokud je každá vstupní hodnota , NULLfunkce vrací NULL.
D. Vypočítat přibližný medián rozděleného okna
Tento příklad přidává přibližnou mediánovou latenci 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,
APPROX_MEDIAN(latency_ms) OVER (PARTITION BY service) AS ServiceApproxMedianLatency
FROM ServiceLatency;