Volver a la lista de artículos Artículos
Lectura de 8 minutos

Explicación de la función de recuento de SQL con 7 ejemplos

Una de las funciones agregadas más útiles de SQL es la función COUNT(). Si eres nuevo en SQL y quieres conocer las distintas formas de utilizar la función COUNT() con algunos ejemplos prácticos, este artículo es para ti.

La función COUNT() es una de las funciones agregadas más útiles en SQL. Contar el número total de pedidos de un cliente en los últimos días, el número de visitantes únicos que han comprado una entrada a un museo o el número de empleados de un departamento, todo ello puede hacerse utilizando la función COUNT().

Pero, antes de pasar a algunos ejemplos del mundo real de SQL COUNT(), eche un vistazo a la sintaxis de ejemplo para utilizar la función COUNT(). La sintaxis básica es:

SELECT COUNT([DISTINCT] )
FROM 
WHERE ;

La función COUNT() aparece en la parte SELECT de la consulta y puede aceptar un nombre de columna como argumento. Opcionalmente, puede especificar la palabra clave DISTINCT para contar sólo las ocurrencias únicas de los valores. No te preocupes si no lo entiendes en este momento; más adelante en este artículo explicaré el uso de DISTINCT con COUNT() con ejemplos.

Vamos a sumergirnos para entender la función SQL COUNT() y las diversas formas de utilizarla con algunos casos de uso del mundo real. A modo de demostración, digamos que trabajas en una empresa que vende coches y motos. Tiene a su disposición el siguiente conjunto de datos.

El products tabla:

product_codeproduct_nameproduct_lineproduct_vendorbuy_price
S10_1678Harley Davidson ChopperMotorcyclesMLD4881
S10_1949Alpine Renault 1300Classic CarsCMC9858
S10_2016Moto Guzzi 1100iMotorcyclesHMC6899
S10_4698Harley Davidson Eagle DragMotorcyclesRSD9102
S10_4757Alfa Romeo GTAClassic Carsnull8568

La tabla tiene 5 columnas con los siguientes datos:

  1. product_code: Un código único que identifica cada producto.
  2. product_name: El nombre del coche o de la moto.
  3. product_line: Una clasificación que identifica si el producto es un coche o una moto.
  4. product_vendor: Un código que identifica al proveedor correspondiente del producto.
  5. buy_price: El precio que el vendedor cobra por el producto.

Supongamos ahora que quiere averiguar el número de productos de la tabla. Aquí es donde la función COUNT() puede ayudarle. La consulta se parece a esto:

SELECT COUNT(product_code)
FROM products;

La salida:

COUNT(product_code)
5

En esta consulta, SQL cuenta todos los valores de product_code en la tabla products y devuelve el número total. Esto se debe a que pasamos la columna product_code como argumento a nuestra función COUNT(). Alternativamente, si sólo quieres calcular el número de filas en la tabla products tabla, puede hacer algo como esto:

SELECT COUNT(*)
FROM products;

La salida:

COUNT(*)
5

Aquí, hemos utilizado "*" como argumento de la función, que simplemente le dice a SQL que cuente todas las filas de la tabla.

Ahora, digamos que quiere contar todas las líneas de productos en la tabla. Basado en lo que aprendiste en el ejemplo anterior, probablemente escribirías algo como esto.

SELECT COUNT(product_line)
FROM products;

La salida:

COUNT(product_line)
5

La consulta devolvió 5 como salida porque SQL contó un valor de product_line por cada fila de la tabla. Es importante señalar que la función COUNT() no tiene en cuenta los duplicados por defecto. Por ejemplo, la tabla products sólo tiene dos valores únicos para la columna product_line - "Motos" y "Coches clásicos" - pero nuestra consulta sigue devolviendo 5 como valor. Por lo tanto, si quiere contar sólo los valores únicos de la tabla, tiene que utilizar la palabra clave DISTINCT con su función COUNT().

La consulta:

SELECT COUNT(DISTINCT product_line)
FROM products;

La salida:

COUNT(DISTINCT product_line)
2

En esta consulta, como especificamos explícitamente la palabra clave DISTINCT en el argumento de la función COUNT(), SQL cuenta sólo los valores únicos de product_line.

También puede utilizar condiciones en la cláusula WHERE para contar sólo filas específicas. Por ejemplo, digamos que quiere averiguar el número de productos que pertenecen a la línea de productos "Motos". Para ello, puede utilizar la siguiente consulta:

SELECT COUNT(product_code)
FROM products
WHERE product_line = ‘Motorcycles’;

La salida:

COUNT(product_code)
3

Aquí, SQL filtra primero todas las filas en las que el valor de product_line es "Motos". A continuación, cuenta el número de códigos de producto.

Una cosa importante a tener en cuenta es que la función SQL COUNT() no considera NULL mientras cuenta. En la products tabla, el valor product_vendor para el product_code "S10_4757" es NULL. Por lo tanto, la siguiente consulta devuelve el valor 4 y no 5.

SELECT COUNT(product_vendor)
FROM products;

El resultado:

COUNT(product_vendor)
4

Mientras que los valores "HLD", "CMC", "HMD" y "RSD" se incluyen en el recuento, NULL se excluye.

La función COUNT() de SQL con una cláusula GROUP BY

Si usted trabaja (o aspira a trabajar) como analista y utiliza SQL para hacer análisis de datos, entonces en la mayoría de los casos utiliza la función COUNT() con una cláusula GROUP BY.

La cláusula GROUP BY en SQL se utiliza para agregar (agrupar) datos en grupos para ayudar a calcular métricas agregadas. Las funciones agregadas disponibles en SQL son COUNT(), SUM(), AVG(), MIN() y MAX(). Estas funciones devuelven un único valor para varias filas. La agregación es importante porque no siempre es posible revisar cada fila para generar información.

Agrupar a los clientes en función de sus necesidades y comportamientos específicos (segmentación), agrupar los productos en diferentes tipos, o agrupar a varias personas en función de sus ingresos, son todos ejemplos de agregación.

Pongamos un ejemplo utilizando la función COUNT() para entenderlo mejor. Supongamos que quiere calcular el número de productos de cada línea de productos.

La consulta:

SELECT product_line,
	 COUNT(product_code)
FROM products
GROUP BY product_line;

La salida:

product_lineCOUNT(product_code)
Motorcycles3
Classic Cars2

En esta consulta, SQL obtiene primero todos los valores únicos de product_line como primera columna, y luego cuenta el número de productos (product_code) que pertenecen a cada uno de ellos. En resumen, SQL agrega todas las filas por línea de producto y luego utiliza la función de agregado (COUNT() en este caso) para calcular el número de productos de cada línea de producto.

Es importante especificar todas las columnas (excepto la parte de la función agregada) que se utilizan en la parte SELECT de la consulta en la cláusula GROUP BY. De lo contrario, SQL arroja un error. Puedes leer este artículo para entender los errores más comunes con las cláusulas GROUP BY.

Hasta ahora, los ejemplos que he mostrado en este artículo tienen la función COUNT() en la parte SELECT de la consulta. Sin embargo, COUNT() es una función versátil; puedes usarla de varias maneras y en diferentes partes de la consulta. Echemos un vistazo.

La función SQL COUNT() con condición en una cláusula HAVING

La cláusula HAVING se utiliza para filtrar grupos basados en condiciones para la función de agregación. Por ejemplo, supongamos que queremos devolver sólo aquellos grupos agregados con un recuento superior a un determinado número.

Con nuestro conjunto de datos, imagine que quiere ver sólo las líneas de productos con más de 2 productos.

La consulta:

SELECT product_line,
	   COUNT(product_code)
FROM products
GROUP BY product_line
HAVING COUNT(product_code)>2;

La salida:

product_lineCOUNT(product_code)
Motorcycles3

La consulta funciona de forma similar a la anterior, en la que SQL agrupa las filas en función de los valores únicos de product_line y, a continuación, devuelve el número de productos pertenecientes a cada línea de productos mediante la función COUNT(). Sin embargo, como hemos elegido mantener sólo las líneas de productos con más de dos productos, no tenemos la línea de productos "Classic Cars" (que sólo tiene 2 productos) en los resultados.

El SQL COUNT() en una cláusula ORDER BY

También puede darse el caso de que quiera ver todas las líneas de productos, pero quiera ordenarlas por el número de productos que tienen. En este caso, necesitamos utilizar la función COUNT() en la cláusula ORDER BY.

La consulta:

SELECT   product_line,
	   COUNT(product_code)
FROM     products
ORDER BY COUNT(product_line);

La salida:

product_lineCOUNT(product_code)
Classic Cars2
Motorcycles3

En esta consulta, SQL devuelve las líneas de producto únicas como grupos y el número de productos de cada línea de producto como el recuento. Sin embargo, debido a la cláusula ORDER BY, los resultados se ordenan de forma ascendente mediante la función COUNT().

La función SQL COUNT() con la condición en una cláusula WHERE

La función COUNT() no puede utilizarse directamente en una cláusula WHERE. Así, por ejemplo, si quiere recuperar todos los detalles de los productos que pertenecen a una línea de productos con al menos 3 productos, no puede utilizar esta consulta.

SELECT *
FROM products
WHERE COUNT(product_line)>=3;

La salida:

ERROR 1111 (HY000): Invalid use of group function

Tampoco puede lograr esto con sólo las cláusulas GROUP BY y HAVING directamente. Esto se debe a que sólo se obtienen filas agrupadas pero no todos los detalles sobre los productos como se requiere aquí.

En su lugar, tiene que utilizar algo conocido como subconsulta (una consulta dentro de la consulta principal). Este es el aspecto de la consulta.

SELECT *
FROM products
WHERE product_line in (SELECT product_line
    			   FROM products
			   GROUP BY product_line
   HAVING COUNT(product_code)>=3);

La salida:

product_codeproduct_nameproduct_lineproduct_vendorbuy_price
S10_1678Harley Davidson ChopperMotorcyclesMLD4881
S10_2016Moto Guzzi 1100iMotorcyclesHMC6899
S10_4698Harley Davidson Eagle DragMotorcyclesRSD9102

¿Listo para usar la función COUNT()?

Ahora que has leído este artículo, deberías tener una comprensión decente de cómo usar la función COUNT(). Una vez que empieces a usar la función en tus consultas, tu comprensión mejorará aún más.

Si eres nuevo en SQL y quieres crear una base sólida antes de saltar a los trabajos prácticos, te recomiendo este tema de LearnSQL.es. Me gusta especialmente porque ofrece una cobertura completa de los conceptos básicos y te da una base para hacer crecer tu carrera.

La práctica juega un papel muy importante en tu aprendizaje cuando se trata de SQL. Así que sigue practicando diferentes tipos de consultas, expande tus límites y sigue creciendo.

Por supuesto, el primer paso es el más difícil. Lo bueno es que no hay escasez de material de aprendizaje en LearnSQL.es para ayudarte en tu viaje. Así que, ¡empieza hoy mismo!