APPROX_QUANTILE (Transact-SQL)

Van toepassing op:SQL Analytics-eindpunt in Microsoft Fabric en Warehouse in Microsoft Fabric

De APPROX_QUANTILE functie geeft een benaderende continue quantiel van niet-numeriekeNULL waarden terug. U kunt deze gebruiken als een statistische functie en een vensterfunctie (analysefunctie):

  • Aggregaatgebruik: Geeft de gevraagde benaderende quantiel terug voor een hele groep.
  • Venstergebruik: Geeft de gevraagde gevraagde benaderende quantiel terug voor elke partitie, terwijl de uitvoer op rijniveau behouden blijft.

Transact-SQL syntaxis-conventies

Syntax

Syntaxis van aggregatiefunctie:

APPROX_QUANTILE ( numeric_literal , numeric_expression )

Syntaxis van analysefunctie:

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

Argumenten

numeric_literal

De quantiel om te schatten. De waarde moet in het inclusieve bereik liggen van tot en met 0.01.0. Geef bijvoorbeeld aan 0.5 dat je de mediaan moet schatten of 0.95 het 95e percentiel.

numeric_expression

De numerieke uitdrukking waarvan de benaderde quantiel wordt berekend. Ondersteunde exacte numerieke types zijn int, bigint, , smallint, tinyint, smallmoneynumericdecimalen money. Ondersteunde benaderende numerieke types zijn float en real.

OVER-component

De partition_by_clause verdeelt de resultatenset die door de FROM component wordt geproduceerd in partities en de functie wordt toegepast op elke partitie.

Als je partition_by_clause niet specificeert, behandelt de functie alle rijen van de zoekresultatenset als één enkele partitie.

De OVER clausule ondersteunt ORDER BY, ROWS, of RANGE voor APPROX_QUANTILEniet.

Zie SELECT - OVER-component (Transact-SQL)voor meer informatie.

Retourtypen

Retourneert float(53).

Remarks

APPROX_QUANTILE schat een continue quantiel over de geordende niet-invoerwaardenNULL . Gebruik QUANTILE wanneer je een exact resultaat nodig hebt.

Berende resultaten kunnen enigszins verschillen van exacte QUANTILE resultaten en kunnen variëren tussen uitvoeringen door uitvoeringsplannen en parallelle samenvoegingspaden. APPROX_QUANTILE is niet-deterministisch. Zie Deterministische en niet-deterministische functiesvoor meer informatie.

NULL waarden worden genegeerd. Als alle invoerwaarden zijn NULL, of als geen rijen kwalificeren, APPROX_QUANTILE geeft NULL. Wanneer ANSI_WARNINGS , ONproduceert het elimineren NULL van waarden de standaard aggregatiewaarschuwing.

APPROX_QUANTILE is bedoeld om latentie en geheugengebruik te verminderen in vergelijking met exacte QUANTILE berekeningen op grote datasets.

DISTINCT wordt niet ondersteund. Karakter-, datum-, tijd- en datum-tijd-expressies worden niet ondersteund.

De APPROX_QUANTILE functie is beschikbaar in Fabric Data Warehouse en het SQL-analyse-eindpunt van Fabric items. De APPROX_QUANTILE functie wordt niet ondersteund in SQL Server, Azure SQL Database, Azure SQL Managed Instance of SQL Database in Fabric.

Gebruiksituatie

APPROX_QUANTILE Gebruik voor grootschalige dashboards, verkennende analyses en gegroepeerde rapportages waar een nauwkeurige schatting voldoende is. Bijvoorbeeld, schat p90-claimbedragen, p95-servicelatentie of p99-telemetriewaarden zonder de kosten van een exacte kwantisatieberekening.

Examples

Eén. Bereken de geaggregeerde benaderende kwantielen

Dit voorbeeld schat het eerste kwartiel, mediaan, derde kwartiel en 95e percentiel.

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. Bereken een benaderende quantiel voor elke groep

Dit voorbeeld schat het claimbedrag van het 90e percentiel voor elk verzekeringsplan.

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. Geef NULL terug voor een all-NULL groep

Dit voorbeeld geeft terug NULL omdat alle kwalificerende waarden zijn 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. Bereken een gepartitioneerde venster-benadering van een quantiel

Dit voorbeeld voegt de ongeveer 95e percentiel latentie voor elke dienst toe aan elke verzoekrij.

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;