COUNT con CASE
Parte de la sección Más allá de lo básico del Journey de SQL de Coddy — lección 12 de 27.
Puedes poner una expresión CASE dentro de un agregado. El truco es que COUNT ignora NULL, por lo que un CASE sin ELSE solo cuenta las filas que coinciden con la condición.
SELECT
COUNT(*) AS total,
COUNT(CASE WHEN status = 'active' THEN 1 END) AS active_count
FROM usersAhora active_count es el número de filas 'active' a pesar de que no filtramos toda la consulta. Este es el truco detrás de cada consulta de dashboard multi-métrica que escribirás jamás.
Desafío
FácilTablas y columnas disponibles:
<strong>orders</strong>:<strong>id</strong>,<strong>customer_id</strong>,<strong>status</strong>
Para cada customer_id devuelve:
customer_idtotal: total de pedidos que realizó el clienteshipped: conteo dondestatus = 'shipped'cancelled: conteo dondestatus = 'cancelled'
Devuelve solo los clientes que tengan al menos un pedido cancelado. Ordena por customer_id.
Hoja de referencia
Usa CASE dentro de COUNT para contar filas que coincidan con una condición sin filtrar toda la consulta (COUNT ignora NULL, así que omite la cláusula ELSE):
SELECT
COUNT(*) AS total,
COUNT(CASE WHEN status = 'active' THEN 1 END) AS active_count
FROM usersPruébalo tú mismo
SELECT customer_id,
COUNT(*) AS total,
-- shipped, cancelled usando COUNT(CASE ...)
FROM orders
GROUP BY customer_id
-- filtrar por clientes con al menos una cancelación
ORDER BY customer_id
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Más allá de lo básico
3Agregación condicional
COUNT con CASESUM con CASEPivotar filas a columnasResumen - Fuentes de tráfico