Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för:SQL-analysslutpunkt i Microsoft Fabric och Warehouse i Microsoft Fabric
Funktionen APPROX_MEDIAN returnerar en ungefärlig median, eller 50:e percentilen, av icke-numeriskaNULL värden. Du kan använda den som både en aggregeringsfunktion och en funktion för fönster (analys):
- Aggregerad användning: Returnerar en ungefärlig median för en hel grupp.
- Fönsteranvändning: Returnerar en ungefärlig median för varje partition samtidigt som radnivåutdata bevaras.
Transact-SQL syntaxkonventioner
Syntax
Syntax för sammansättningsfunktionen:
APPROX_MEDIAN ( numeric_expression )
Analysfunktionssyntax:
APPROX_MEDIAN ( numeric_expression ) OVER ( [ <partition_by_clause> ] )
Arguments
numeric_expression
Det numeriska uttrycket vars ungefärliga median beräknas. Stödda exakta numeriska typer är int, , , smallint, tinyint, decimalnumeric, smallmoney, , och moneybigint. Stödda approximativa numeriska typer är float och real.
OVER-sats
Partition_by_clause delar upp resultatuppsättningen FROM som genereras av -satsen i partitioner och funktionen tillämpas på varje partition.
Om du inte specificerar partition_by_clause behandlar funktionen alla rader i frågeresultatuppsättningen som en enda partition.
Klausulen OVER stöder ORDER BYinte , ROWS, eller RANGE för APPROX_MEDIAN.
Mer information finns i SELECT - OVER-satsen (Transact-SQL).
Returtyper
Returnerar float(53).
Remarks
APPROX_MEDIAN uppskattar den kontinuerliga 50:e percentilen av de ordnade icke-indatavärdenaNULL . Använd MEDIAN när du behöver ett exakt resultat.
Ungefärliga resultat kan skilja sig något från exakta MEDIAN resultat och kan variera mellan utföranden på grund av exekveringsplaner och parallella sammanslagningsvägar.
APPROX_MEDIAN är nondeterministisk. Mer information finns i deterministiska och icke-terministiska funktioner.
NULL värden ignoreras. Om alla indatavärden är NULL, eller om inga rader kvalificerar, APPROX_MEDIAN returnerar NULL. När ANSI_WARNINGS är ON, ger eliminering NULL av värden den standardiserade aggregerade varningen.
APPROX_MEDIAN är avsedd att minska latens och minnesanvändning jämfört med exakta MEDIAN beräkningar på stora datamängder.
DISTINCT stöds inte. Tecken-, datum-, tid- och datumtidsuttryck stöds inte.
Funktionen APPROX_MEDIAN finns tillgänglig i Fabric Data Warehouse och i SQL-analysändpunkten för Fabric objekt. Funktionen APPROX_MEDIAN stöds inte i SQL Server, Azure SQL Database, Azure SQL Managed Instance eller SQL Database in Fabric.
Användningsfall
Använd APPROX_MEDIAN för storskaliga dashboards, utforskande analyser och grupperad rapportering där en noggrann uppskattning är tillräcklig och frågeprestanda är viktigare än en exakt median. Vanliga exempel inkluderar ungefärligt medianordervärde, tjänstelatens och telemetrimätningar.
Examples
A. Beräkna en aggregerad ungefärlig median
Detta exempel uppskattar medianen av åtta värden.
SELECT APPROX_MEDIAN(value) AS ApproxMedianValue
FROM (VALUES (1), (2), (3), (4), (5), (6), (7), (8)) AS t(value);
Resultatet ligger nära den exakta medianen av 4.5, men det kan variera något.
B. Beräkna en ungefärlig median för varje grupp
Detta exempel uppskattar medianorderbeloppet för varje försäljningsregion.
WITH SalesOrders AS (
SELECT *
FROM (VALUES
('North', 120.00),
('North', 220.00),
('North', 320.00),
('South', 150.00),
('South', 250.00),
('South', 450.00)
) AS v(region, order_amount)
)
SELECT
region,
APPROX_MEDIAN(order_amount) AS ApproxMedianOrderAmount
FROM SalesOrders
GROUP BY region;
C. Ignorera NULL-värden
Detta exempel ignorerar NULL värden vid uppskattning av medianen.
SELECT APPROX_MEDIAN(value) AS ApproxMedianValue
FROM (VALUES (1), (2), (NULL), (3), (4)) AS t(value);
Om varje indatavärde är NULL, returnerar NULLfunktionen .
D. Beräkna en approximativ median i ett partitionerat fönster
Detta exempel lägger till den ungefärliga mediana latensen för varje tjänst till varje förfrågningsrad.
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_MEDIAN(latency_ms) OVER (PARTITION BY service) AS ServiceApproxMedianLatency
FROM ServiceLatency;