APPROX_MEDIAN (Transact-SQL)

Gäller för:SQL-analysslutpunkt i Microsoft Fabric och Warehouse i Microsoft Fabric

Funktionen APPROX_MEDIAN returnerar en ungefärlig median, eller 50:e percentilen, av icke-numeriskaNULL värden. Du kan använda den som både en aggregeringsfunktion och en funktion för fönster (analys):

  • Aggregerad användning: Returnerar en ungefärlig median för en hel grupp.
  • Fönsteranvändning: Returnerar en ungefärlig median för varje partition samtidigt som radnivåutdata bevaras.

Transact-SQL syntaxkonventioner

Syntax

Syntax för sammansättningsfunktionen:

APPROX_MEDIAN ( numeric_expression )

Analysfunktionssyntax:

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

Arguments

numeric_expression

Det numeriska uttrycket vars ungefärliga median beräknas. Stödda exakta numeriska typer är int, , , smallint, tinyint, decimalnumeric, smallmoney, , och moneybigint. Stödda approximativa numeriska typer är float och real.

OVER-sats

Partition_by_clause delar upp resultatuppsättningen FROM som genereras av -satsen i partitioner och funktionen tillämpas på varje partition.

Om du inte specificerar partition_by_clause behandlar funktionen alla rader i frågeresultatuppsättningen som en enda partition.

Klausulen OVER stöder ORDER BYinte , ROWS, eller RANGE för APPROX_MEDIAN.

Mer information finns i SELECT - OVER-satsen (Transact-SQL).

Returtyper

Returnerar float(53).

Remarks

APPROX_MEDIAN uppskattar den kontinuerliga 50:e percentilen av de ordnade icke-indatavärdenaNULL . Använd MEDIAN när du behöver ett exakt resultat.

Ungefärliga resultat kan skilja sig något från exakta MEDIAN resultat och kan variera mellan utföranden på grund av exekveringsplaner och parallella sammanslagningsvägar. APPROX_MEDIAN är nondeterministisk. Mer information finns i deterministiska och icke-terministiska funktioner.

NULL värden ignoreras. Om alla indatavärden är NULL, eller om inga rader kvalificerar, APPROX_MEDIAN returnerar NULL. När ANSI_WARNINGS är ON, ger eliminering NULL av värden den standardiserade aggregerade varningen.

APPROX_MEDIAN är avsedd att minska latens och minnesanvändning jämfört med exakta MEDIAN beräkningar på stora datamängder.

DISTINCT stöds inte. Tecken-, datum-, tid- och datumtidsuttryck stöds inte.

Funktionen APPROX_MEDIAN finns tillgänglig i Fabric Data Warehouse och i SQL-analysändpunkten för Fabric objekt. Funktionen APPROX_MEDIAN stöds inte i SQL Server, Azure SQL Database, Azure SQL Managed Instance eller SQL Database in Fabric.

Användningsfall

Använd APPROX_MEDIAN för storskaliga dashboards, utforskande analyser och grupperad rapportering där en noggrann uppskattning är tillräcklig och frågeprestanda är viktigare än en exakt median. Vanliga exempel inkluderar ungefärligt medianordervärde, tjänstelatens och telemetrimätningar.

Examples

A. Beräkna en aggregerad ungefärlig median

Detta exempel uppskattar medianen av åtta värden.

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

Resultatet ligger nära den exakta medianen av 4.5, men det kan variera något.

B. Beräkna en ungefärlig median för varje grupp

Detta exempel uppskattar medianorderbeloppet för varje försäljningsregion.

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. Ignorera NULL-värden

Detta exempel ignorerar NULL värden vid uppskattning av medianen.

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

Om varje indatavärde är NULL, returnerar NULLfunktionen .

D. Beräkna en approximativ median i ett partitionerat fönster

Detta exempel lägger till den ungefärliga mediana latensen för varje tjänst till varje förfrågningsrad.

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;