Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:Punkt końcowy analizy SQL w usłudze Microsoft Fabric i magazynie w usłudze Microsoft Fabric
Funkcja QUANTILE zwraca dokładną ciągłą kwantylę wartości nienumerycznychNULL . Można go użyć zarówno jako funkcji agregującej, jak i funkcji okna (analitycznego):
- Zużycie agregatu: Zwraca żądaną kwantylę dla całej grupy.
- Wykorzystanie okna: Zwraca żądaną kwantylę dla każdej partycji, zachowując wyjście na poziomie wiersza.
Transact-SQL konwencje składni
Syntax
Składnia funkcji agregacji:
QUANTILE ( numeric_literal , numeric_expression )
Składnia funkcji analitycznej:
QUANTILE ( numeric_literal , numeric_expression ) OVER ( [ <partition_by_clause> ] )
Arguments
numeric_literal
Kwantyl do obliczenia. Wartość musi mieścić się w zakresie inkluzywnym od 0.0 do .1.0 Na przykład określ 0.5 obliczenie mediany lub 0.95 95. percentyla.
numeric_expression
Wyrażenie liczbowe, którego kwantyl jest obliczany. Obsługiwane dokładne typy numeryczne to int, bigint, smallint, tinyintnumeric, , decimal, , smallmoneyoraz .money Obsługiwane przybliżone typy numeryczne to float oraz .real
Klauzula OVER
Partition_by_clause dzieli zestaw wyników wygenerowany przez klauzulę FROM na partycje, a funkcja jest stosowana do każdej partycji.
Jeśli nie określisz partition_by_clause, funkcja traktuje wszystkie wiersze zbioru wyników zapytania jako jedną partycję.
Klauzula OVER nie wspiera ORDER BY, ROWS, ani RANGE dla QUANTILE.
Aby uzyskać więcej informacji, zobacz SELECT - OVER clause (Transact-SQL).
Typy zwracane
Zwraca wartość float(53).
Remarks
QUANTILE oblicza kwantyl ciągły po uporządkowanych wartościach niewejściowychNULL . Gdy żądana kwantyla znajduje się pomiędzy dwiema wartościami, funkcja interpoluje między nimi. Wynik może nie być wartością istniejącą w wierszach wejściowych.
Forma agregowana jest QUANTILE(p, numeric_expression) równoważna .PERCENTILE_CONT(p) WITHIN GROUP (ORDER BY numeric_expression) Forma analityczna posiada równoważną semantykę percentylowo-ciągłą w każdej partycji.
NULL wartości są ignorowane. Jeśli wszystkie wartości wejściowe są , NULLlub jeśli żaden wiersz nie spełnia kwalifikacji, QUANTILE zwraca NULL. Gdy ANSI_WARNINGS jest , ONeliminacja NULL wartości generuje standardowe ostrzeżenie agregatywne.
Dla tych samych wartości niebędącychNULL wejściem i numeric_literalQUANTILE daje ten sam wynik.
DISTINCT nie jest obsługiwany. Nie są obsługiwane wyrażenia dotyczące postaci, daty, godziny i daty i godziny.
Funkcja ta QUANTILE nie jest obsługiwana w SQL Server, Azure SQL Database, Azure SQL Managed Instance ani w bazie danych SQL w Fabric.
Przypadek użycia
Użyj do QUANTILE obliczania kwartyli, percentyli i innych dokładnych granic rozkładu z zwięzłą składnią. Na przykład oblicz kwoty roszczeń p90 według planu, p95 opóźnienia usług według regionów lub wartości Q1, mediany i Q3 dla metryki biznesowej.
Examples
Odp. Obliczanie kwentyli agregatu
Ten przykład oblicza pierwszy kwartyl, medianę, trzeci kwartyl oraz 95. percentyl.
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. Oblicz kwantyl dla każdej grupy
Ten przykład oblicza kwotę roszczenia w 90. percentylu dla każdego planu ubezpieczeniowego.
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. Return NULL dla grupy składającej się wyłącznie z NULL
Ten przykład zwraca, NULL ponieważ wszystkie wartości kwalifikujące to 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. Oblicz kwantylę okna podzielonego
Ten przykład dodaje opóźnienie 95. percentylu dla każdej usługi do każdego wiersza żądania.
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;