APPROX_MEDIAN (Transact-SQL)

Şunlar için geçerlidir:Microsoft Fabric'te SQL analiz uç noktası ve Microsoft Fabric'teki Ambar

Fonksiyon, APPROX_MEDIAN sayısal olmayanNULL değerlerden oluşan yaklaşık bir median veya yüzde 50'lik bir oranı döndürür. Bunu hem toplama işlevi hem de pencere (analiz) işlevi olarak kullanabilirsiniz:

  • Toplam kullanım: Tüm bir grup için yaklaşık bir medyan döndürür.
  • Pencere kullanımı: Her bölüm için yaklaşık bir medyan dönerken, satır düzeyindeki çıktıyı korur.

Transact-SQL söz dizimi kuralları

Syntax

Toplama işlevinin söz dizimi:

APPROX_MEDIAN ( numeric_expression )

Analiz işlevinin söz dizimi:

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

Argümanlar

numeric_expression

Yaklaşık medyanı hesaplanan sayısal ifade. Desteklenen tam sayısal tipler int, bigint, smallint, tinyint, smallmoneynumericdecimal, , , , ve .money Desteklenen yaklaşık sayısal tipler ve real'dir.float

OVER yan tümcesi

partition_by_clause yan tümcesi tarafından FROM üretilen sonuç kümesini bölümlere ayırır ve işlev her bölüme uygulanır.

partition_by_clause belirtmezseniz, fonksiyon sorgu sonuç kümesinin tüm satırlarını tek bir bölüm olarak ele alır.

Bu OVER madde ORDER BY, ROWS, ya RANGE da için APPROX_MEDIANdesteklemez.

Daha fazla bilgi için bkz. SELECT - OVER yan tümcesi (Transact-SQL).

Dönüş türleri

float(53) döndürür.

Remarks

APPROX_MEDIAN sıralıNULL girdi olmayan değerlerin sürekli 50. yüzdelik dilisini tahmin eder. Kesin bir sonuç istediğinizde MEDIAN kullanın.

Yaklaşık sonuçlar, kesin MEDIAN sonuçlardan biraz farklı olabilir ve uygulama planları ile paralel birleştirme yolları nedeniyle uygulamalar arasında değişiklik gösterebilir. APPROX_MEDIAN belirsiz değildir. Daha fazla bilgi için bkz. Deterministik ve deterministik olmayan fonksiyonlar.

NULL değerleri yoksayılır. Tüm girdi değerleri NULLise veya hiçbir satır uygun değilse, APPROX_MEDIAN döner NULL. Ne ANSI_WARNINGS zaman ON, değerleri ortadan NULL kaldırır ve standart toplam uyarı oluşturur.

APPROX_MEDIAN büyük veri kümelerindeki kesin MEDIAN hesaplamalara kıyasla gecikmeyi ve bellek kullanımını azaltmak amacıyla tasarlanmıştır.

DISTINCT desteklenmez. Karakter, tarih, saat ve tarih saati ifadeleri desteklenmiyor.

Fonksiyon, APPROX_MEDIAN Fabric Data Warehouse ve Fabric öğelerin SQL analitik uç noktasında mevcuttur. Bu APPROX_MEDIAN fonksiyon SQL Server, Azure SQL Veritabanı, Azure SQL Yönetilen Örneği veya SQL database in Fabric'te desteklenmemektedir.

Kullanım örneği

Büyük ölçekli dashboardlar, keşif analizleri ve yakın tahminin yeterli olduğu ve sorgulama performansının kesin bir medyandan daha önemli olduğu gruplanmış raporlama için kullanım APPROX_MEDIAN . Yaygın örnekler arasında yaklaşık medyan emir değeri, hizmet gecikmesi ve telemetri ölçümleri bulunur.

Examples

A. Toplam yaklaşık bir medyan hesaplayın

Bu örnek, medyanını sekiz değer olarak tahmin etmektedir.

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

Sonuç tam medyanına 4.5yakın, ancak biraz değişiklik gösterebilir.

B. Her grup için yaklaşık bir medyan hesaplayın

Bu örnek, her satış bölgesi için medyan sipariş miktarını tahmin eder.

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. NULL değerlerini görmezden gelin

Bu örnek, medyan tahmini sırasında değerleri göz ardı NULL eder.

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

Her giriş değeri ise NULLfonksiyon döndürür NULL.

D. Bölünmüş bir pencere yaklaşık medyanı hesaplayın

Bu örnek, her hizmet için yaklaşık medyan gecikmeyi her istek satırına ekler.

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;