APPROX_MEDIAN (Transact-SQL)

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.

Transact-SQL konvence syntaxe

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;