APPROX_MEDIAN (Transact-SQL)

Se aplica a:Punto de conexión de SQL Analytics en Microsoft Fabric y Warehouse en Microsoft Fabric

La APPROX_MEDIAN función devuelve una mediana aproximada, o percentil 50, de valores noNULL numéricos. Puede usarlo como una función de agregado y una función de ventana (analítica):

  • Uso agregado: Devuelve una mediana aproximada para todo un grupo.
  • Uso de ventanas: Devuelve una mediana aproximada para cada partición mientras conserva la salida a nivel de fila.

Convenciones de sintaxis de Transact-SQL

Syntax

Sintaxis de función de agregación:

APPROX_MEDIAN ( numeric_expression )

Sintaxis de función analítica:

APPROX_MEDIAN ( numeric_expression ) OVER ( [ <partition_by_clause> ] )

Argumentos

numeric_expression

La expresión numérica cuya mediana aproximada se calcula. Los tipos numéricos exactos soportados son int, bigint, smallint, tinyint, numeric, decimal, smallmoney, , y money. Los tipos numéricos aproximados soportados son float y real.

Cláusula OVER

El partition_by_clause divide el conjunto de resultados generado por la FROM cláusula en particiones y la función se aplica a cada partición.

Si no especificas partition_by_clause, la función trata todas las filas del conjunto de resultados de la consulta como una sola partición.

La OVER cláusula no soporta ORDER BY, ROWS, ni RANGE para APPROX_MEDIAN.

Para obtener más información, vea CLÁUSULA SELECT - OVER (Transact-SQL).

Tipos de retorno

Devuelve float(53).

Remarks

APPROX_MEDIAN estima el percentil 50 continuo de los valores ordenados no deNULL entrada. Usa MEDIANA cuando necesites un resultado exacto.

Los resultados aproximados pueden diferir ligeramente de los resultados exactos MEDIAN y variar entre ejecuciones debido a los planes de ejecución y las rutas de fusión paralelas. APPROX_MEDIAN sea no determinista. Para más información, vea Funciones deterministas y no deterministas.

Se omiten los valores NULL. Si todos los valores de entrada son NULL, o si ninguna fila califica, APPROX_MEDIAN devuelve NULL. Cuando ANSI_WARNINGS es ON, eliminar NULL valores produce la advertencia agregada estándar.

APPROX_MEDIAN está destinado a reducir la latencia y el uso de memoria en comparación con cálculos exactos MEDIAN en grandes conjuntos de datos.

DISTINCT no es compatible. No se admiten expresiones de personaje, fecha, hora y hora de cita.

La APPROX_MEDIAN función está disponible en Fabric Data Warehouse y en el endpoint de analítica SQL de Fabric elementos. La APPROX_MEDIAN función no está soportada en SQL Server, Azure SQL Database, Azure SQL Managed Instance ni SQL database en Fabric.

Caso de uso

Úsalo APPROX_MEDIAN para paneles de control a gran escala, análisis exploratorios e informes agrupados donde una estimación cercana es suficiente y el rendimiento de las consultas importa más que una mediana exacta. Ejemplos comunes incluyen el valor medio aproximado del orden, la latencia del servicio y las mediciones de telemetría.

Examples

R. Calcular una mediana aproximada agregada

Este ejemplo estima la mediana de ocho valores.

SELECT APPROX_MEDIAN(value) AS ApproxMedianValue
FROM (VALUES (1), (2), (3), (4), (5), (6), (7), (8)) AS t(value);

El resultado es cercano a la mediana exacta de 4.5, pero puede variar ligeramente.

B. Calcula una mediana aproximada para cada grupo

Este ejemplo estima la cantidad mediana de pedidos para cada región de ventas.

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. Ignorar los valores NULL

Este ejemplo ignora NULL los valores al estimar la mediana.

SELECT APPROX_MEDIAN(value) AS ApproxMedianValue
FROM (VALUES (1), (2), (NULL), (3), (4)) AS t(value);

Si cada valor de entrada es NULL, la función devuelve NULL.

D. Calcula una mediana aproximada de una ventana particionada

Este ejemplo añade la latencia mediana aproximada de cada servicio a cada fila de petición.

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;