APPROX_QUANTILE (Transact-SQL)

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

La APPROX_QUANTILE función devuelve un cuantil continuo aproximado de valores noNULL numéricos. Puede usarlo como una función de agregado y una función de ventana (analítica):

  • Uso agregado: Devuelve el cuantil aproximado solicitado para todo un grupo.
  • Uso de ventanas: Devuelve el cuantil aproximado solicitado 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_QUANTILE ( numeric_literal , numeric_expression )

Sintaxis de función analítica:

APPROX_QUANTILE ( numeric_literal , numeric_expression ) OVER ( [ <partition_by_clause> ] )

Argumentos

numeric_literal

El cuantil a estimar. El valor debe estar en el rango inclusivo de 0.0 hasta 1.0. Por ejemplo, especificar 0.5 estimar la mediana o 0.95 estimar el percentil 95.

numeric_expression

La expresión numérica cuyo cuantil aproximado 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_QUANTILE.

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

Tipos de retorno

Devuelve float(53).

Remarks

APPROX_QUANTILE estima un cuantil continuo sobre los valores ordenados no deNULL entrada. Usa QUANTILE cuando necesites un resultado exacto.

Los resultados aproximados pueden diferir ligeramente de los resultados exactos QUANTILE y variar entre ejecuciones debido a los planes de ejecución y las rutas de fusión paralelas. APPROX_QUANTILE 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_QUANTILE devuelve NULL. Cuando ANSI_WARNINGS es ON, eliminar NULL valores produce la advertencia agregada estándar.

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

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

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

Caso de uso

Úsalos APPROX_QUANTILE para paneles de control a gran escala, análisis exploratorios e informes agrupados donde una estimación cercana sea suficiente. Por ejemplo, estima cantidades de reclamaciones p90, latencia de servicio p95 o valores de telemetría p99 sin el coste de un cálculo cuantilístico exacto.

Examples

R. Calcular cuantiles aproximados agregados

Este ejemplo estima el primer cuartil, mediana, tercer cuartil y percentil 95.

WITH Samples AS (
    SELECT *
    FROM (VALUES
        (1), (NULL), (2), (3), (4), (5), (6), (7), (8), (13)
    ) AS v(value)
)
SELECT
    APPROX_QUANTILE(0.25, value) AS ApproxQ1,
    APPROX_QUANTILE(0.50, value) AS ApproxMedian,
    APPROX_QUANTILE(0.75, value) AS ApproxQ3,
    APPROX_QUANTILE(0.95, value) AS ApproxP95
FROM Samples;

B. Calcula un cuantil aproximado para cada grupo

Este ejemplo estima el percentil 90 de la cantidad de reclamaciones para cada plan de seguro.

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,
    APPROX_QUANTILE(0.90, claim_amount) AS ApproxP90ClaimAmount
FROM Claims
GROUP BY plan_name;

C. Devolver NULL para un grupo totalmente NULL

Este ejemplo se devuelve NULL porque todos los valores que califican son NULL.

WITH CampaignDiscounts AS (
    SELECT *
    FROM (VALUES
        (9001, NULL),
        (9001, NULL),
        (9001, NULL),
        (9002, 10.00)
    ) AS v(campaign_id, discount_percent)
)
SELECT APPROX_QUANTILE(0.90, discount_percent) AS ApproxP90DiscountPercent
FROM CampaignDiscounts
WHERE campaign_id = 9001;

D. Calcular un cuantil aproximado de ventana particionada

Este ejemplo añade la latencia aproximada del percentil 95 para cada servicio a cada fila de solicitudes.

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_QUANTILE(0.95, latency_ms) OVER (PARTITION BY service) AS ServiceApproxP95Latency
FROM ServiceLatency;