MEDIÁN (Transact-SQL)

A következőkre vonatkozik:SQL Analytics-végpont a Microsoft Fabricben és a Microsoft Fabric warehouse-ban

A MEDIAN függvény a nemNULL numerikus értékek pontos mediánját, vagyis 50. percentilisét adja vissza. Összesítő függvényként és ablakfüggvényként (analitikus) is használható:

  • Aggregált használat: Egy egész csoport mediánját adja vissza.
  • Ablakhasználat: Minden partíció mediánját adja vissza, miközben megőrzi a sorszintű kimenetet.

Transact-SQL szintaxis konvenciók

Szemantika

Aggregációs függvény szintaxisa:

MEDIAN ( numeric_expression )

Elemzési függvény szintaxisa:

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

Arguments

numeric_expression

Az a numerikus kifejezés, amelynek mediánját kiszámítják. A támogatott pontos numerikus típusok , intbigint, smallint, tinyint, bitsmallmoneynumericdecimalés .money A támogatott közelítő numerikus típusok és floatreal.

OVER záradék

A partition_by_clause a záradék által FROM létrehozott eredményhalmazt partíciókra osztja, és a függvényt minden partícióra alkalmazza a rendszer.

Ha nem határozod meg partition_by_clause, a függvény a lekérdezés eredményhalmazának minden sorát egyetlen partícióként kezeli.

A OVER klauda nem támogatja ORDER BY, ROWS, vagy RANGE .MEDIAN

További információ: SELECT – OVER záradék (Transact-SQL).

Visszatérési típusok

Visszatér float(53).

Remarks

MEDIAN kiszámítja a rendezett, nemNULL bemeneti értékek folyamatos 50. percentilisét. Páros számú bemeneti érték esetén a függvény interpolál a két középső érték között. Az eredmény nem feltétlenül olyan érték, amely a bemeneti sorokban létezik.

MEDIAN az aggregált használat megfelelője PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY numeric_expression) . Az analitikus forma minden partíción belül ekvivalens percentilis-folyamatos szemantika van.

NULL az értékek figyelmen kívül lesznek hagyva. Ha minden bemeneti érték , NULLvagy ha egyetlen sor sem minősül, MEDIAN akkor visszaadja NULL. Amikor ANSI_WARNINGS az , ONaz értékek kizárása NULL a standard aggregált figyelmeztetést eredményezi.

MEDIAN nem determinisztika, mert a párhuzamos végrehajtási útvonalakon végzett lebegőpontos számítások kis eltéréseket okozhatnak. További információ: Determinisztikus és nem determinisztikus függvények.

DISTINCT nem támogatott. A karakter, dátum, időpont és dátum kifejezések nem támogatottak.

A MEDIAN funkció elérhető Fabric Data Warehouse-ben, valamint az SQL analitikai végpont Fabric elemekkel. Ez a MEDIAN funkció nem támogatja az SQL Server-ben, Azure SQL Database-ban, Azure SQL Managed Instance-ban vagy az SQL database-ben a Fabric-ben.

Felhasználási eset

Használat MEDIAN , amikor az átlag szokatlanul magas vagy alacsony értékek miatt torzulhat. Például a medián sorrend érték, a válaszidő vagy a igény összege gyakran egy tipikus megfigyelést tisztábban képvisel, mint az aritmetikai átlag. Az aggregált űrlap összefoglalja a csoportokat, az analitikus űrlap pedig minden részletsorhoz egy partíciós mércét ad hozzá.

Példák

A. Kiszámítsunk egy aggregált mediánt

Ez a példa a nyolc érték mediánját adja vissza. Mivel a bemenetnek páros számú sora van, MEDIAN 4 és 5 között interpolál.

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

Az eredmény: 4.5.

B. Számítsunk ki mediánt minden csoporthoz

Ez a példa minden értékesítési régió medián rendelési összegét számolja ki.

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. Figyelmen kívül hagyd a NULL értékeket

Ez a példa figyelmen kívül hagyja a bemenetet NULL , és a mediánt a maradék értékekből számolja ki.

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

Ha minden bemeneti érték , NULLa függvény visszaadja NULL.

D. Számolj ki egy partíciós ablakmediánt

Ez a példa minden szolgáltatás medián késleltetését minden kéréssorhoz hozzáadja.

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;