Cómo Contar Datos Usando las Funciones COUNT y CASE en SQL

Al combinar la función COUNT de SQL con las declaraciones CASE, puedes contar datos de manera eficiente basado en condiciones específicas. Esto permite una agregación más flexible que el simple conteo. En este artículo, entenderemos los conceptos básicos de la función COUNT y las declaraciones CASE, y aprenderemos a usarlas mediante ejemplos específicos de consultas SQL.

Índice

Conceptos Básicos de la Función COUNT

La función COUNT se usa en SQL para contar el número de filas en una base de datos. Puedes usarla para obtener el número total de filas o el número de filas donde una columna específica tiene un valor.

Contando Todas las Filas

Para contar todas las filas en una tabla, usa COUNT(*) de la siguiente manera:

SELECT COUNT(*) FROM table_name;

Contando Valores en una Columna Específica

Para contar filas donde una columna específica tiene un valor, usa COUNT(column_name). Los valores NULL no son contados.

SELECT COUNT(column_name) FROM table_name;

Conceptos Básicos de la Declaración CASE

La declaración CASE es una expresión condicional usada en SQL para devolver diferentes valores basados en condiciones específicas. Tiene una sintaxis similar a las declaraciones IF-THEN-ELSE, permitiendo devolver valores específicos cuando se cumplen ciertas condiciones y valores diferentes en caso contrario.

Sintaxis de la Declaración CASE

La sintaxis básica de la declaración CASE es la siguiente:

CASE
    WHEN condition1 THEN result1
    WHEN condition2 THEN result2
    ...
    ELSE resultN
END

Cada condición se evalúa en secuencia, y se devuelve el resultado de la primera condición verdadera. Si todas las condiciones son falsas, se devuelve la parte ELSE del resultado. Si se omite ELSE, se devuelve NULL si todas las condiciones son falsas.

Ejemplo Sencillo

Por ejemplo, para evaluar los salarios de los empleados y asignar calificaciones basadas en rangos específicos, usa la declaración CASE de la siguiente manera:

SELECT name,
       CASE
           WHEN salary >= 100000 THEN 'High'
           WHEN salary >= 50000 THEN 'Medium'
           ELSE 'Low'
       END AS salary_rating
FROM employees;

En este ejemplo, un salario de 100000 o más devuelve “High”, 50000 o más devuelve “Medium”, y cualquier otra cosa devuelve “Low”.

Combinando las Declaraciones COUNT y CASE

Al combinar la función COUNT con las declaraciones CASE, puedes contar datos basados en condiciones específicas. Esto te permite evaluar y agregar múltiples condiciones en una sola consulta.

Sintaxis Básica para Contar Condicionalmente

La sintaxis básica para combinar la función COUNT con las declaraciones CASE es la siguiente:

SELECT
    COUNT(CASE WHEN condition1 THEN 1 END) AS count_condition1,
    COUNT(CASE WHEN condition2 THEN 1 END) AS count_condition2
FROM table_name;

Esta sintaxis cuenta el número de filas que cumplen cada condición. La declaración CASE devuelve 1 cuando es verdadera, y la función COUNT cuenta estas ocurrencias.

Ejemplo Específico

Por ejemplo, para contar el número de clientes masculinos y femeninos en una tabla de clientes, usa la siguiente consulta:

SELECT
    COUNT(CASE WHEN gender = 'Male' THEN 1 END) AS male_count,
    COUNT(CASE WHEN gender = 'Female' THEN 1 END) AS female_count
FROM customers;

Este ejemplo cuenta filas donde el género es ‘Male’ y ‘Female’ respectivamente.

Contando Múltiples Condiciones

Al combinar múltiples condiciones, puedes contar datos con más detalle. Por ejemplo, para contar el número de productos con los estados ‘On Sale’ y ‘Discontinued’, usa la siguiente consulta:

SELECT
    COUNT(CASE WHEN status = 'On Sale' THEN 1 END) AS on_sale_count,
    COUNT(CASE WHEN status = 'Discontinued' THEN 1 END) AS discontinued_count
FROM products;

Este método facilita la agregación de datos basados en condiciones específicas.

Ejemplos de Consultas SQL

Aquí, presentamos ejemplos específicos de consultas SQL que combinan la función COUNT y las declaraciones CASE para contar datos basados en condiciones específicas. Esto te ayudará a entender cómo usarlas en operaciones de base de datos reales.

Ejemplo 1: Contando Clientes por Grupo de Edad

Esta consulta cuenta clientes en diferentes grupos de edad de una tabla de clientes.

SELECT
    COUNT(CASE WHEN age < 20 THEN 1 END) AS 'Under 20',
    COUNT(CASE WHEN age BETWEEN 20 AND 29 THEN 1 END) AS '20s',
    COUNT(CASE WHEN age BETWEEN 30 AND 39 THEN 1 END) AS '30s',
    COUNT(CASE WHEN age BETWEEN 40 AND 49 THEN 1 END) AS '40s',
    COUNT(CASE WHEN age >= 50 THEN 1 END) AS '50 and above'
FROM customers;

Esta consulta categoriza a los clientes en cinco grupos de edad y cuenta el número en cada grupo.

Ejemplo 2: Contando Productos por Estado

Esta consulta cuenta el número de productos por su estado en una tabla de productos.

SELECT
    COUNT(CASE WHEN status = 'In Stock' THEN 1 END) AS 'In Stock',
    COUNT(CASE WHEN status = 'Out of Stock' THEN 1 END) AS 'Out of Stock',
    COUNT(CASE WHEN status = 'Discontinued' THEN 1 END) AS 'Discontinued'
FROM products;

Esta consulta cuenta el número de productos con estados ‘In Stock’, ‘Out of Stock’, y ‘Discontinued’.

Ejemplo 3: Contando Órdenes por Estado

Esta consulta cuenta el número de órdenes por su estado en una tabla de órdenes.

SELECT
    COUNT(CASE WHEN status = 'New' THEN 1 END) AS 'New Orders',
    COUNT(CASE WHEN status = 'Processing' THEN 1 END) AS 'Processing Orders',
    COUNT(CASE WHEN status = 'Completed' THEN 1 END) AS 'Completed Orders'
FROM orders;

Esta consulta cuenta el número de órdenes con estados ‘New’, ‘Processing’, y ‘Completed’.

Ejemplos Avanzados

La combinación de la función COUNT y las declaraciones CASE puede aplicarse a condiciones más complejas para la agregación de datos. Aquí hay algunos ejemplos prácticos que pueden ser útiles en escenarios del mundo real.

Ejemplo 1: Contando Clientes Basado en Historial de Compras

Esta consulta cuenta clientes basados en si hicieron una compra en el último año, usando una tabla de clientes y una tabla de historial de compras.

SELECT
    COUNT(CASE WHEN purchase_date >= DATEADD(YEAR, -1, GETDATE()) THEN 1 END) AS 'Customers Purchased in Last Year',
    COUNT(CASE WHEN purchase_date < DATEADD(YEAR, -1, GETDATE()) OR purchase_date IS NULL THEN 1 END) AS 'Customers Not Purchased in Last Year'
FROM customers LEFT JOIN purchase_history ON customers.customer_id = purchase_history.customer_id;

Esta consulta cuenta clientes que hicieron una compra en el último año y aquellos que no lo hicieron.

Ejemplo 2: Contando Ventas por Categoría de Producto

Esta consulta cuenta el número de ventas por categoría de producto, uniendo la tabla de ventas con la tabla de productos.

SELECT
    product_category,
    COUNT(CASE WHEN sales_amount > 0 THEN 1 END) AS 'Sales Count'
FROM sales
JOIN products ON sales.product_id = products.product_id
GROUP BY product_category;

Esta consulta cuenta el número de productos vendidos en cada categoría de producto.

Ejemplo 3: Contando Múltiples Condiciones

Esta consulta cuenta datos combinando múltiples condiciones. Por ejemplo, contando el estado de compra de los clientes por grupo de edad.

SELECT
    COUNT(CASE WHEN age < 20 AND purchase_date IS NOT NULL THEN 1 END) AS 'Customers Under 20 Who Purchased',
    COUNT(CASE WHEN age BETWEEN 20 AND 29 AND purchase_date IS NOT NULL THEN 1 END) AS 'Customers in 20s Who Purchased',
    COUNT(CASE WHEN age BETWEEN 30 AND 39 AND purchase_date IS NOT NULL THEN 1 END) AS 'Customers in 30s Who Purchased',
    COUNT(CASE WHEN age BETWEEN 40 AND 49 AND purchase_date IS NOT NULL THEN 1 END) AS 'Customers in 40s Who Purchased',
    COUNT(CASE WHEN age >= 50 AND purchase_date IS NOT NULL THEN 1 END) AS 'Customers 50 and Above Who Purchased'
FROM customers LEFT JOIN purchase_history ON customers.customer_id = purchase_history.customer_id;

Esta consulta cuenta el número de clientes con historial de compra por grupo de edad.

Conclusión

Combinar la función COUNT con las declaraciones CASE permite contar datos de manera eficiente basados en condiciones específicas en SQL. Este método es útil no solo para la agregación simple, sino también para evaluar y analizar datos con múltiples condiciones a la vez. A través de ejemplos específicos de consultas, aprendimos cómo aplicar estas técnicas en operaciones reales de bases de datos, como contar clientes por grupo de edad o estados de productos. Utilizar estas técnicas permite un análisis de datos más avanzado y la creación de informes.

Índice