typestar

FILTER dentro de un agregado en SQL

Una sola pasada por la tabla, varios conteos con filtros distintos.

SELECT
    customer_id,
    COUNT(*) AS orders_total,
    COUNT(*) FILTER (WHERE status = 'paid') AS paid,
    COUNT(*) FILTER (WHERE status = 'pending') AS pending,
    SUM(total) FILTER (WHERE status = 'paid') AS paid_value
FROM orders
GROUP BY customer_id;

Cómo funciona

  1. FILTER (WHERE ...) restringe las filas que ve un agregado.
  2. El WHERE externo quitaría esas filas para todas las columnas a la vez.
  3. SUM(CASE WHEN ... THEN 1 END) es la ortografía vieja de la misma idea.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
8
Caracteres a escribir
239
Tokens
57
Ritmo de tres estrellas
95 tpm

Al ritmo de tres estrellas de 95 tokens por minuto, este intento toma unos 36 segundos.

Escribe este fragmento

Paso 3 de 7 en Expresiones; paso 18 de 24 en Analítica y reportes.

← Anterior Siguiente →