Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro:Koncový bod analýzy SQL v Microsoft Fabric a Warehouse v Microsoft Fabric
Funkce QUANTILE vrací přesný spojitý kvantil nečíselnýchNULL hodnot. Můžete ji použít jako agregační funkci i funkci okna (analýzy):
- Agregované využití: Vrátí požadovaný kvantil pro celou skupinu.
- Využití okna: Vrátí požadovaný kvantil pro každou partition při zachování výstupu na úrovni řádku.
Syntaxe
Syntaxe agregační funkce:
QUANTILE ( numeric_literal , numeric_expression )
Syntaxe analytické funkce:
QUANTILE ( numeric_literal , numeric_expression ) OVER ( [ <partition_by_clause> ] )
Argumenty
numeric_literal
Kvantil k výpočtu. Hodnota musí být v inkluzivním rozsahu od 0.0 do 1.0. Například specifikujte 0.5 výpočet mediánu nebo 0.95 95. percentilu.
numeric_expression
Číselný výraz, jehož kvantil je vypočítán. Podporované přesné numerické typy jsou int, bigint, smallint, tinyint, numeric, decimal, , smallmoneya .money Podporované přibližné numerické typy jsou float a .real
Klauzule OVER
Partition_by_clause rozdělí sadu výsledků vytvořenou FROM klauzulí na oddíly a funkce se použije na každý oddíl.
Pokud partition_by_clause nespecifikujete, funkce považuje všechny řádky z množiny výsledků dotazu jako jednu partition.
Klauzule OVER nepodporuje ORDER BY, ROWS, ani RANGE pro QUANTILE.
Další informace naleznete v tématu SELECT - OVER klauzule (Transact-SQL).
Návratové typy
Vrátí float(53).
Remarks
QUANTILE vypočítá spojitý kvantil přes uspořádané nevstupníNULL hodnoty. Když požadovaný kvantil spadne mezi dvě hodnoty, funkce mezi nimi interpoluje. Výsledkem nemusí být hodnota, která by existovala ve vstupních řádcích.
Agregovaná forma je QUANTILE(p, numeric_expression) ekvivalentní .PERCENTILE_CONT(p) WITHIN GROUP (ORDER BY numeric_expression) Analytická forma má ekvivalentní percentilově spojitou sémantiku v rámci každé části.
NULL hodnoty jsou ignorovány. Pokud jsou všechny vstupní hodnoty , NULLnebo pokud žádné řádky nesplňují podmínky, QUANTILE vrátí NULL. Když ANSI_WARNINGS je , ONodstranění NULL hodnot vytváří standardní agregované varování.
Pro stejné nevstupníNULL hodnoty a numeric_literal vrátí QUANTILE stejný výsledek.
DISTINCT není podporováno. Znaky, datum, čas a datum a datum nejsou podporovány.
Tato QUANTILE funkce není podporována v SQL Server, Azure SQL Database, Azure SQL Managed Instance ani v SQL databázi ve Fabric.
Případ použití
Použijte k QUANTILE výpočtu kvartilů, percentilů a dalších přesných hranic rozdělení s přesnou syntaxí. Například vypočítejte částky pojistných událostí p90 podle plánu, latenci služby p95 podle regionu, nebo Q1, medián a Q3 hodnoty pro obchodní metriku.
Examples
A. Výpočet agregovaných kvantilů
Tento příklad počítá první kvartil, medián, třetí kvartil a 95. percentil.
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. Vypočítejte kvantil pro každou skupinu
Tento příklad počítá částku nároku na nárok v 90. percentilu pro každý pojistný plán.
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. Vrátit NULL pro skupinu složenou výhradně z NULL
Tento příklad vrací, NULL protože všechny kvalifikační hodnoty jsou 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. Vypočítejte kvantil rozděleného okna
Tento příklad přidává latenci 95. percentilu pro každou službu ke každému řádku požadavku.
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;