KUANTIL (Transact-SQL)

Berlaku untuk:Titik akhir analitik SQL di Microsoft Fabric dan Warehouse di Microsoft Fabric

Fungsi ini QUANTILE mengembalikan kuantil kontinu tepat dari nilai non-numerikNULL . Anda dapat menggunakannya sebagai fungsi agregat dan fungsi jendela (analitik):

  • Penggunaan agregat: Mengembalikan kuantil yang diminta untuk seluruh grup.
  • Penggunaan jendela: Mengembalikan kuantil yang diminta untuk setiap partisi sambil mempertahankan output tingkat baris.

Konvensi sintaks Transact-SQL

Syntax

Sintaks fungsi agregasi:

QUANTILE ( numeric_literal , numeric_expression )

Sintaks fungsi analitik:

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

Argumen

numeric_literal

Kuantil yang harus dihitung. Nilai harus berada dalam rentang inklusif dari 0.0 hingga 1.0. Misalnya, tentukan 0.5 untuk menghitung median atau 0.95 persentil ke-95.

numeric_expression

Ekspresi numerik yang kuantilnya dihitung. Tipe numerik eksak yang didukung adalah int, bigint, smallint, tinyint, numeric, decimalsmallmoneydan money. Tipe numerik perkiraan yang didukung adalah float dan real.

Klausa OVER

partition_by_clause membagi tataan hasil yang dihasilkan oleh FROM klausul menjadi partisi, dan fungsi diterapkan ke setiap partisi.

Jika Anda tidak menentukan partition_by_clause, fungsi akan memperlakukan semua baris dari hasil query sebagai satu partisi tunggal.

Klausul tersebut OVER tidak mendukung ORDER BY, ROWS, atau RANGE untuk QUANTILE.

Untuk informasi selengkapnya, lihat SELECT - OVER clause (Transact-SQL).

Tipe pengembalian

Menampilkan float(53).

Komentar

QUANTILE menghitung kuantil kontinu atas nilai non-inputNULL yang diurutkan. Ketika kuantil yang diminta berada di antara dua nilai, fungsi tersebut diinterpolasi di antara keduanya. Hasilnya mungkin bukan nilai yang ada di baris input.

Bentuk agregat dari QUANTILE(p, numeric_expression) adalah setara dengan PERCENTILE_CONT(p) WITHIN GROUP (ORDER BY numeric_expression). Bentuk analitik memiliki semantik persentil kontinu yang setara di dalam setiap partisi.

NULL nilai diabaikan. Jika semua nilai input adalah NULL, atau jika tidak ada baris yang memenuhi syarat, QUANTILE mengembalikan NULL. Ketika ANSI_WARNINGS adalah ON, menghilangkan NULL nilai menghasilkan peringatan agregat standar.

Untuk nilai dan numeric_literal yang samaNULL tanpa input, QUANTILE mengembalikan hasil yang sama.

DISTINCT tidak didukung. Ekspresi karakter, tanggal, waktu, dan waktu tanggal tidak didukung.

Fungsi ini QUANTILE tidak didukung di SQL Server, Azure SQL Database, Azure SQL Managed Instance, atau database SQL di Fabric.

Skenario penggunaan

Gunakan QUANTILE untuk menghitung kuartil, persentil, dan batas distribusi tepat lainnya dengan sintaks yang ringkas. Misalnya, hitung jumlah klaim p90 berdasarkan rencana, latensi layanan p95 berdasarkan wilayah, atau nilai Q1, median, dan Q3 untuk metrik bisnis.

Examples

A. Hitung kuantil agregat

Contoh ini menghitung kuartil pertama, median, kuartil ketiga, dan persentil ke-95.

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. Hitung kuantil untuk setiap grup

Contoh ini menghitung jumlah klaim persentil ke-90 untuk setiap rencana asuransi.

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. Mengembalikan NULL untuk grup all-NULL

Contoh ini mengembalikan NULL karena semua nilai kualifikasi adalah 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. Hitung kuantil jendela terpartisi

Contoh ini menambahkan latensi persentil ke-95 untuk setiap layanan ke setiap baris permintaan.

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;