Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für:SQL-Analyseendpunkt in Microsoft Fabric und Warehouse in Microsoft Fabric
Die APPROX_QUANTILE Funktion liefert ein ungefähres stetiges Quantil nicht-numerischerNULL Werte zurück. Sie können sie sowohl als Aggregatfunktion als auch als Fensterfunktion (Analysefunktion) verwenden:
- Aggregierte Nutzung: Gibt das angeforderte ungefähre Quantil für eine ganze Gruppe zurück.
- Fensternutzung: Gibt für jede Partition das angeforderte ungefähre Quantil zurück, während die Zeilenausgabe erhalten bleibt.
Transact-SQL-Syntaxkonventionen
Syntax
Syntax der Aggregationsfunktion:
APPROX_QUANTILE ( numeric_literal , numeric_expression )
Analysefunktionssyntax:
APPROX_QUANTILE ( numeric_literal , numeric_expression ) OVER ( [ <partition_by_clause> ] )
Argumente
numeric_literal
Das zu schätzende Quantil. Der Wert muss im inklusiven Bereich von 0.0 bis 1.0liegen. Zum Beispiel geben 0.5 Sie an, den Median oder 0.95 das 95. Perzentil zu schätzen.
numeric_expression
Der numerische Ausdruck, dessen ungefähres Quantil berechnet wird. Unterstützte exakte numerische Typen sind int, bigint, smallint, , tinyint, smallmoneynumericdecimalund money. Unterstützte approximative numerische Typen sind float und real.
OVER-Klausel
Die partition_by_clause dividiert das von der FROM Klausel erzeugte Resultset in Partitionen, und die Funktion wird auf jede Partition angewendet.
Wenn Sie partition_by_clause nicht spezifizieren, behandelt die Funktion alle Zeilen der Abfrageergebnismenge als eine einzige Partition.
Die Klausel OVER unterstützt ORDER BYnicht , ROWS, oder RANGE für APPROX_QUANTILE.
Weitere Informationen finden Sie unter SELECT - OVER-Klausel (Transact-SQL).
Rückgabetypen
Gibt float(53) zurück.
Hinweise
APPROX_QUANTILE schätzt ein kontinuierliches Quantil über den geordneten nicht-eingangswertenNULL . Verwenden Sie QUANTIL, wenn Sie ein exaktes Ergebnis benötigen.
Ungefähre Ergebnisse können leicht von den exakten QUANTILE Ergebnissen abweichen und können je nach Ausführung durch Ausführungspläne und parallele Merge-Pfade variieren.
APPROX_QUANTILE ist nicht deterministisch. Weitere Informationen finden Sie unter Deterministische und nicht deterministische Funktionen.
NULL Werte werden ignoriert. Wenn alle Eingabewerte sindNULL, oder wenn keine Zeilen qualifizieren, APPROX_QUANTILE gibt .NULL Wenn ANSI_WARNINGS , ONerzeugt das Eliminieren NULL von Werten die standardmäßige aggregierte Warnung.
APPROX_QUANTILE soll Latenz und Speicherverbrauch im Vergleich zu exakten QUANTILE Berechnungen großer Datensätze reduzieren.
DISTINCT wird nicht unterstützt. Zeichen-, Datum-, Uhrzeit- und Datumszeit-Ausdrücke werden nicht unterstützt.
Die APPROX_QUANTILE Funktion ist in Fabric Data Warehouse und im SQL-Analyse-Endpunkt Fabric Items verfügbar. Die Funktion APPROX_QUANTILE wird nicht in SQL Server, Azure SQL-Datenbank, Azure SQL Managed Instance oder SQL Database in Fabric unterstützt.
Anwendungsfall
APPROX_QUANTILE Verwendung für groß angelegte Dashboards, explorative Analysen und gruppierte Berichte, wo eine genaue Schätzung ausreicht. Zum Beispiel kann man P90-Schadensbeträge, P95-Service-Latenz oder p99-Telemetriewerte schätzen, ohne die Kosten einer exakten Quantilberechnung.
Examples
A. Berechnung von aggregierten approximativen Quantilen
Dieses Beispiel schätzt das erste Quartil, den Median, das dritte Quartil und das 95. Perzentil.
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. Berechnen Sie für jede Gruppe ein ungefähres Quantil
Dieses Beispiel schätzt den 90. Perzentilbetrag für jeden Versicherungsplan.
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. Geben Sie NULL für eine vollständig NULL-Gruppe zurück
Dieses Beispiel ergibt sich NULL , weil alle qualifizierenden Werte sind 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. Berechnen Sie ein approximatives Quantil eines partitionierten Fensters
Dieses Beispiel addiert die ungefähre Latenz des 95. Perzentils für jeden Dienst zu jeder Anfragezeile.
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;