sql >> Base de Datos >  >> RDS >> Mysql

MySQL COUNT ():obtenga el número de filas que devolverá una consulta

MySQL incluye un COUNT() función, que le permite averiguar cuántas filas se devolverían de una consulta. Esta función forma parte del estándar SQL y se puede utilizar con la mayoría de los sistemas de gestión de bases de datos relacionales.

El COUNT() La función también se puede usar para afectar los resultados de una consulta si es necesario, por ejemplo, devolviendo solo aquellos resultados que tienen un recuento de filas mayor que una cantidad determinada.

Este artículo contiene ejemplos de COUNT() uso en MySQL.

Los datos

Primero, estos son los datos que usaremos para los ejemplos en esta página:

SELECT *
FROM Tasks;

Resultado:

+--------+-------------------+-----------------+
| TaskId | TaskName          | TaskDescription |
+--------+-------------------+-----------------+
|      1 | Do garden         | NULL            |
|      2 | Feed cats         | NULL            |
|      3 | Paint roof        | NULL            |
|      4 | Take dog for walk | NULL            |
|      5 | Relax             | NULL            |
|      6 | Feed cats         | NULL            |
+--------+-------------------+-----------------+

Cuenta todas las filas de una tabla

Puedes usar COUNT() para devolver el número total de filas en una tabla:

SELECT COUNT(*)
FROM Tasks;

Resultado:

+----------+
| COUNT(*) |
+----------+
|        6 |
+----------+ 

Esto devuelve el número de filas en la tabla porque no proporcionamos ningún criterio para reducir los resultados.

Restringir los resultados

Cuando agregamos un WHERE cláusula que reduce el conjunto de resultados, obtenemos un número más pequeño:

SELECT COUNT(*)
FROM Tasks
WHERE TaskName LIKE '%cat%';

Resultado:

+----------+
| COUNT(*) |
+----------+
|        2 |
+----------+

Columna única frente a asterisco (*)

Todos los ejemplos anteriores usan un asterisco para aplicar el conteo a todas las columnas. Como con cualquier consulta, el asterisco es opcional y se usa como comodín para devolver todas las columnas. Entonces, al usar COUNT() función, también tiene la opción de proporcionar columnas específicas (a diferencia de todas las columnas) como argumento.

Ejemplo:

SELECT COUNT(TaskName)
FROM Tasks;

Resultado:

+-----------------+
| COUNT(TaskName) |
+-----------------+
|               6 |
+-----------------+

Si bien este ejemplo devuelve el mismo resultado que obtuvimos cuando usamos el asterisco, ese no siempre será necesariamente el caso. Por ejemplo, esto es lo que sucede si especificamos una columna diferente:

SELECT COUNT(TaskDescription)
FROM Tasks;

Resultado:

+------------------------+
| COUNT(TaskDescription) |
+------------------------+
|                      0 |
+------------------------+

En este caso obtenemos cero, porque esa columna en particular contiene valores nulos en cada fila.

Ejemplo:Distinto

Puede agregar el DISTINCT argumento para devolver solo el número de filas con diferentes no NULL valores.

Es posible que haya notado que el TaskName la columna tiene un valor duplicado ("Alimentar gatos" aparece dos veces). Esto podría causar problemas si no desea que se cuenten los duplicados.

Así es como se ve si aplicamos DISTINCT argumento al TaskName columna:

SELECT COUNT(DISTINCT TaskName)
FROM Tasks;

Resultado:

+--------------------------+
| COUNT(DISTINCT TaskName) |
+--------------------------+
|                        5 |
+--------------------------+

Entonces, aunque la tabla contiene seis filas, dos de ellas están duplicadas. Por lo tanto, esos dos se cuentan como uno, obtenemos un resultado de cinco.

Ejemplo:la cláusula HAVING

También puede usar COUNT() con el HAVING cláusula para limitar un conjunto de resultados en función del número de filas que se devolverían.

Aquí hay un ejemplo que usa un conjunto de datos diferente a los ejemplos anteriores:

USE Music;
SELECT ar.ArtistName,   
       COUNT(al.AlbumName) 'Album Count'
FROM Artists ar
INNER JOIN Albums al 
ON ar.ArtistId = al.ArtistId
GROUP BY ar.ArtistName
HAVING COUNT(al.AlbumName) > 1;

Resultado:

+------------------------+-------------+
| ArtistName             | Album Count |
+------------------------+-------------+
| Iron Maiden            |           5 |
| Devin Townsend         |           3 |
| Michael Learns to Rock |           3 |
| Tom Jones              |           3 |
| Allan Holdsworth       |           2 |
+------------------------+-------------+

Esta consulta devuelve solo aquellos artistas que han lanzado más de 1 álbum. Esto es lo que sucede cuando aumentamos el valor en HAVING cláusula:

USE Music;
SELECT ar.ArtistName,   
       COUNT(al.AlbumName) 'Album Count'
FROM Artists ar
INNER JOIN Albums al 
ON ar.ArtistId = al.ArtistId
GROUP BY ar.ArtistName
HAVING COUNT(al.AlbumName) > 4;

Resultado:

+-------------+-------------+
| ArtistName  | Album Count |
+-------------+-------------+
| Iron Maiden |           5 |
+-------------+-------------+