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 QUANTILE Funktion liefert ein exaktes, kontinuierliches Quantil nicht-numerischerNULL Werte. Sie können sie sowohl als Aggregatfunktion als auch als Fensterfunktion (Analysefunktion) verwenden:
- Aggregierte Nutzung: Gibt das angeforderte Quantil für eine ganze Gruppe zurück.
- Fensternutzung: Gibt für jede Partition das angeforderte Quantil zurück, während die Zeilenausgabe erhalten bleibt.
Transact-SQL-Syntaxkonventionen
Syntax
Syntax der Aggregationsfunktion:
QUANTILE ( numeric_literal , numeric_expression )
Analysefunktionssyntax:
QUANTILE ( numeric_literal , numeric_expression ) OVER ( [ <partition_by_clause> ] )
Argumente
numeric_literal
Das Quantil, das berechnet werden soll. Der Wert muss im inklusiven Bereich von 0.0 bis 1.0liegen. Zum Beispiel geben 0.5 Sie an, den Median zu berechnen oder 0.95 den 95. Perzentil.
numeric_expression
Der numerische Ausdruck, dessen 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 QUANTILE.
Weitere Informationen finden Sie unter SELECT - OVER-Klausel (Transact-SQL).
Rückgabetypen
Gibt float(53) zurück.
Hinweise
QUANTILE berechnet ein kontinuierliches Quantil über den geordneten nicht-eingangswertenNULL . Wenn das angeforderte Quantil zwischen zwei Werten liegt, interpoliert die Funktion zwischen ihnen. Das Ergebnis ist möglicherweise kein Wert, der in den Eingabezeilen existiert.
Die aggregierte Form von QUANTILE(p, numeric_expression) ist äquivalent zu PERCENTILE_CONT(p) WITHIN GROUP (ORDER BY numeric_expression). Die analytische Form besitzt innerhalb jeder Partition äquivalente percentilkontinuierliche Semantik.
NULL Werte werden ignoriert. Wenn alle Eingabewerte sindNULL, oder wenn keine Zeilen qualifizieren, QUANTILE gibt .NULL Wenn ANSI_WARNINGS , ONerzeugt das Eliminieren NULL von Werten die standardmäßige aggregierte Warnung.
Für dieselben Nicht-EingabewerteNULL und numeric_literal liefert QUANTILE das gleiche Ergebnis.
DISTINCT wird nicht unterstützt. Zeichen-, Datum-, Uhrzeit- und Datumszeit-Ausdrücke werden nicht unterstützt.
Die Funktion QUANTILE wird nicht in SQL Server, Azure SQL-Datenbank, Azure SQL Managed Instance oder SQL Database in Fabric unterstützt.
Anwendungsfall
Verwenden QUANTILE Sie, um Quartile, Perzentile und andere exakte Verteilungsgrenzen mit prägnanter Syntax zu berechnen. Berechnen Sie zum Beispiel P90-Schadensbeträge nach Plan, P95-Service-Latenz nach Region oder Q1-, Median- und Q3-Werte für eine Geschäftskennzahl.
Examples
A. Berechnung der aggregierten Quantile
Dieses Beispiel berechnet 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
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. Berechnen Sie für jede Gruppe ein Quantil
Dieses Beispiel berechnet den Schadensbetrag des 90. Perzentils 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,
QUANTILE(0.90, claim_amount) AS P90ClaimAmount
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 QUANTILE(0.90, discount_percent) AS P90DiscountPercent
FROM CampaignDiscounts
WHERE campaign_id = 9001;
D. Berechnen Sie ein partitioniertes Fensterquantil
Dieses Beispiel fügt die Latenz des 95. Perzentils für jeden Dienst zu jeder Anfragezeile hinzu.
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;