MEDIAAN (Transact-SQL)

Van toepassing op:SQL Analytics-eindpunt in Microsoft Fabric en Warehouse in Microsoft Fabric

De MEDIAN functie geeft het exacte mediaan, of 50e percentiel, van niet-numeriekeNULL waarden terug. U kunt deze gebruiken als een statistische functie en een vensterfunctie (analysefunctie):

  • Geaggregeerd gebruik: Geeft de mediaan terug voor een hele groep.
  • Venstergebruik: Geeft de mediaan voor elke partitie terug, terwijl de output op rijniveau behouden blijft.

Transact-SQL syntaxis-conventies

Syntax

Syntaxis van aggregatiefunctie:

MEDIAN ( numeric_expression )

Syntaxis van analysefunctie:

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

Argumenten

numeric_expression

De numerieke expressie waarvan de mediaan wordt berekend. Ondersteunde exacte numerieke types zijn int, bigint, , smallint, tinyint, bitdecimalnumericsmallmoney, , en money. Ondersteunde benaderende numerieke types zijn float en real.

OVER-component

De partition_by_clause verdeelt de resultatenset die door de FROM component wordt geproduceerd in partities en de functie wordt toegepast op elke partitie.

Als je partition_by_clause niet specificeert, behandelt de functie alle rijen van de zoekresultatenset als één enkele partitie.

De OVER clausule ondersteunt ORDER BY, ROWS, of RANGE voor MEDIANniet.

Zie SELECT - OVER-component (Transact-SQL)voor meer informatie.

Retourtypen

Retourneert float(53).

Remarks

MEDIAN berekent het continue 50e percentiel van de geordende niet-invoerwaardenNULL . Voor een even aantal invoerwaarden interpoleert de functie tussen de twee middelste waarden. Het resultaat hoeft geen waarde te zijn die in de invoerrijen bestaat.

MEDIAN is equivalent aan PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY numeric_expression) voor geaggregeerd gebruik. De analytische vorm heeft equivalente percentiel-continue semantiek binnen elke partitie.

NULL waarden worden genegeerd. Als alle invoerwaarden zijn NULL, of als geen rijen kwalificeren, MEDIAN geeft NULL. Wanneer ANSI_WARNINGS , ONproduceert het elimineren NULL van waarden de standaard aggregatiewaarschuwing.

MEDIAN is niet-deterministisch omdat floating-pointberekeningen in parallelle uitvoeringspaden kleine variaties kunnen veroorzaken. Zie Deterministische en niet-deterministische functiesvoor meer informatie.

DISTINCT wordt niet ondersteund. Karakter-, datum-, tijd- en datum-tijd-expressies worden niet ondersteund.

De MEDIAN functie is beschikbaar in Fabric Data Warehouse en het SQL-analyse-eindpunt van Fabric items. De MEDIAN functie wordt niet ondersteund in SQL Server, Azure SQL Database, Azure SQL Managed Instance of SQL Database in Fabric.

Gebruiksituatie

Gebruik MEDIAN wanneer een gemiddelde vervormd kan worden door ongewoon hoge of lage waarden. Bijvoorbeeld, de mediane orderwaarde, responstijd of het claimbedrag vertegenwoordigen vaak een typische observatie duidelijker dan het rekenkundige gemiddelde. De aggregatevorm vat groepen samen, en de analytische vorm voegt een partitiebenchmark toe aan elke detailrij.

Examples

Eén. Bereken een geaggregeerd mediaan

Dit voorbeeld geeft de mediaan van acht waarden terug. Omdat de invoer een even aantal rijen heeft, MEDIAN interpoleert tussen 4 en 5.

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

Het resultaat is 4.5.

B. Bereken een mediaan voor elke groep

Dit voorbeeld berekent het mediane orderbedrag voor elke verkoopregio.

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. Negeer NULL-waarden

Dit voorbeeld negeert de NULL invoer en berekent de mediaan uit de overige waarden.

SELECT MEDIAN(value) AS MedianValue
FROM (VALUES (1), (2), (NULL), (3), (4)) AS t(value);

Als elke invoerwaarde is NULL, geeft de functie .NULL

D. Bereken een gepartitioneerde venstermediaan

Dit voorbeeld voegt de mediane latentie voor elke service toe aan elke verzoekrij.

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;