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
FILTER (WHERE ...)restringe las filas que ve un agregado.- El
WHEREexterno quitaría esas filas para todas las columnas a la vez. SUM(CASE WHEN ... THEN 1 END)es la ortografía vieja de la misma idea.
Palabras clave y builtins usados aquí
ASBYCOUNTFROMGROUPSELECTSUMWHERE
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.
Paso 3 de 7 en Expresiones; paso 18 de 24 en Analítica y reportes.