Menu
Coddy logo textTech

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 users

Ahora 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.

challenge icon

Desafío

Fácil

Tablas y columnas disponibles:

  • <strong>orders</strong>: <strong>id</strong>, <strong>customer_id</strong>, <strong>status</strong>

Para cada customer_id devuelve:

  • customer_id
  • total: total de pedidos que realizó el cliente
  • shipped: conteo donde status = 'shipped'
  • cancelled: conteo donde status = '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 users

Prué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
quiz iconPonte a prueba

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