QUANTILE (Transact-SQL)

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

Fonksiyon, QUANTILE sayısalNULL olmayan değerlerden oluşan kesin bir sürekli nicelik döndürür. Bunu hem toplama işlevi hem de pencere (analiz) işlevi olarak kullanabilirsiniz:

  • Toplam kullanım: Tüm grup için istenen quantili döndürür.
  • Pencere kullanımı: Her bölüm için istenen kuantili döndürür ve satır düzeyindeki çıktıyı korur.

Transact-SQL söz dizimi kuralları

Syntax

Toplama işlevinin söz dizimi:

QUANTILE ( numeric_literal , numeric_expression )

Analiz işlevinin söz dizimi:

QUANTILE ( numeric_literal , numeric_expression ) OVER ( [ <partition_by_clause> ] )

Argümanlar

numeric_literal

Hesaplanacak kantili. Değer, kapsayıcı aralıkta olmalıdır.0.01.0 Örneğin, medyan veya 0.95 95. yüzde dilili hesaplamayı belirtin0.5.

numeric_expression

Quantili 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 QUANTILEdesteklemez.

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

Dönüş türleri

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

Remarks

QUANTILE sıralı girdiNULL olmayan değerler üzerinde sürekli bir kuantil hesaplar. İstenen quantil iki değer arasında olduğunda, fonksiyon aralarında interpolasyon yapar. Sonuç giriş satırlarında bulunan bir değer olmayabilir.

Toplam formu QUANTILE(p, numeric_expression) ile eşdeğerdir PERCENTILE_CONT(p) WITHIN GROUP (ORDER BY numeric_expression). Analitik formun her bölüm içinde eşdeğer yüzde sürekli anlam sistemi vardır.

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

Aynı girdi olmayanNULL değerler ve numeric_literal için QUANTILE aynı sonucu döndürür.

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

Bu QUANTILE fonksiyon SQL Server, Azure SQL Veritabanı, Azure SQL Yönetilen Örneği veya SQL database in Fabric'te desteklenmemektedir.

Kullanım örneği

Dörtlükler, yüzdelikler ve diğer kesin dağılım sınırlarını kısa sözdizimiyle hesaplamak için kullanılır QUANTILE . Örneğin, plan için p90 talep miktarlarını, bölgeye göre p95 hizmet gecikmesini veya bir iş metriği için Q1, medyan ve Q3 değerlerini hesaplayın.

Examples

A. Toplam kuantilleri hesaplayın

Bu örnek, birinci dörtlük, medyan, üçüncü dörtlük ve 95. perdelik birimi hesaplar.

WITH Samples AS (
    SELECT *
    FROM (VALUES
        (1), (NULL), (2), (3), (4), (5), (6), (7), (8), (13)
    ) AS v(value)
)
SELECT
    QUANTILE(0.25, value) AS Q1_25thPercentile,
    QUANTILE(0.50, value) AS Median_50thPercentile,
    QUANTILE(0.75, value) AS Q3_75thPercentile,
    QUANTILE(0.95, value) AS P95
FROM Samples;

B. Her grup için bir quantil hesaplayın

Bu örnek, her sigorta planı için yüzde 90'lık talep tutarını hesaplar.

WITH Claims AS (
    SELECT *
    FROM (VALUES
        ('Plan-A', 420.00),
        ('Plan-A', 500.00),
        ('Plan-A', 610.00),
        ('Plan-B', 250.00),
        ('Plan-B', 275.00),
        ('Plan-B', 310.00)
    ) AS v(plan_name, claim_amount)
)
SELECT
    plan_name,
    QUANTILE(0.90, claim_amount) AS P90ClaimAmount
FROM Claims
GROUP BY plan_name;

C. Tamamen NULL bir grup için NULL döndür

Bu örnek geri NULL dönür çünkü tüm nitelendirme değerleri 'dir.NULL

WITH CampaignDiscounts AS (
    SELECT *
    FROM (VALUES
        (9001, NULL),
        (9001, NULL),
        (9001, NULL),
        (9002, 10.00)
    ) AS v(campaign_id, discount_percent)
)
SELECT QUANTILE(0.90, discount_percent) AS P90DiscountPercent
FROM CampaignDiscounts
WHERE campaign_id = 9001;

D. Bölünmüş bir pencere quantili hesaplayın

Bu örnek, her hizmet için her istek satırına yüzde 95'lik gecikmeyi 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,
    QUANTILE(0.95, latency_ms) OVER (PARTITION BY service) AS ServiceP95Latency
FROM ServiceLatency;