APPROX_QUANTILE (Transact-SQL)

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

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

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

Konvensi sintaks Transact-SQL

Syntax

Sintaks fungsi agregasi:

APPROX_QUANTILE ( numeric_literal , numeric_expression )

Sintaks fungsi analitik:

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

Argumen

numeric_literal

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

numeric_expression

Ekspresi numerik yang kuantil perkiraannya 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 APPROX_QUANTILE.

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

Tipe pengembalian

Menampilkan float(53).

Komentar

APPROX_QUANTILE mengestimasi kuantil kontinu atas nilai non-inputNULL yang diurutkan. Gunakan QUANTILE saat Anda membutuhkan hasil yang tepat.

Hasil perkiraan dapat sedikit berbeda dari hasil eksaksional QUANTILE dan dapat bervariasi antar eksekusi karena rencana eksekusi dan jalur penggabungan paralel. APPROX_QUANTILE bersifat nondeterministik. Untuk informasi selengkapnya, lihat Fungsi deterministik dan nondeterministik.

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

APPROX_QUANTILE dimaksudkan untuk mengurangi latensi dan penggunaan memori dibandingkan dengan perhitungan tepat QUANTILE pada dataset besar.

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

Fungsi ini APPROX_QUANTILE tersedia di Fabric Data Warehouse dan endpoint analitik SQL dari item Fabric. Fungsi ini APPROX_QUANTILE tidak didukung di SQL Server, Azure SQL Database, Azure SQL Managed Instance, atau database SQL di Fabric.

Skenario penggunaan

Gunakan APPROX_QUANTILE untuk dasbor skala besar, analisis eksploratif, dan pelaporan kelompok di mana estimasi yang dekat sudah cukup. Misalnya, perkirakan jumlah klaim p90, latensi layanan p95, atau nilai telemetri p99 tanpa biaya perhitungan kuantil yang tepat.

Examples

A. Hitung kuantil perkiraan agregat

Contoh ini memperkirakan 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
    APPROX_QUANTILE(0.25, value) AS ApproxQ1,
    APPROX_QUANTILE(0.50, value) AS ApproxMedian,
    APPROX_QUANTILE(0.75, value) AS ApproxQ3,
    APPROX_QUANTILE(0.95, value) AS ApproxP95
FROM Samples;

B. Hitung kuantil perkiraan untuk setiap grup

Contoh ini memperkirakan 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,
    APPROX_QUANTILE(0.90, claim_amount) AS ApproxP90ClaimAmount
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 APPROX_QUANTILE(0.90, discount_percent) AS ApproxP90DiscountPercent
FROM CampaignDiscounts
WHERE campaign_id = 9001;

D. Hitung kuantil perkiraan jendela terpartisi

Contoh ini menambahkan latensi perkiraan 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,
    APPROX_QUANTILE(0.95, latency_ms) OVER (PARTITION BY service) AS ServiceApproxP95Latency
FROM ServiceLatency;