AnteriorPosterior

11. Conteo de filas

Por: MysQL Hispano, 2006
Actualizado: 27-04-2019 16:02
Tiempo de lectura estimado: 4 min.

 

MySQL (MySQL Hispano)

11. Conteo de filas

Las bases de datos son usadas frecuentemente para responder una pregunta, "¿Con qué frecuencia ocurre un cierto tipo de dato en una tabla?". Por ejemplo, tal vez queremos conocer cuántas mascotas tenemos, o cuántas mascotas tiene cada uno de los propietarios.

Contar el número total de animalitos que tenemos es lo mismo que hacer la siguiente pregunta "¿Cuántas filas hay en la tabla mascotas?" ya que hay un registro por mascota. La función COUNT() es la que nos ayuda en esta situación.

mysql> SELECT COUNT(*) FROM mascotas;
+----------+
| COUNT(*) |
+----------+
| 9        |
+----------+
1 row in set (0.00 sec)
```txt

Si deseamos conocer cuántas mascotas tiene cada uno de los propietarios, la consulta es la siguiente:

```txt
mysql> SELECT propietario, COUNT(*) FROM mascotas GROUP BY propietario ;
+-------------+----------+
| propietario | COUNT(*) |
+-------------+----------+
| Arnoldo     | 2        |
| Benito      | 2        |
| Diana       | 2        |
| Juan        | 1        |
| Omar        | 1        |
| Tomás       | 1        |
+-------------+----------+
6 rows in set (0.00 sec)

Se debe notar que se ha usado una cláusula GROUP BY para agrupar todos los registros de cada propietario. Si no hacemos esto, obtendremos un mensaje de error:

mysql> SELECT propietario, COUNT(*) FROM mascotas;
ERROR 1140: Mixing of GROUP columns (MIN(),MAX(),COUNT()...) with no
GROUP columns is illegal if there is no GROUP BY clause

En efecto, el uso de la función COUNT() en conjunto con la cláusula GROUP BY es muy útil en diversas situaciones. A continuación se muestran algunos ejemplos.

El número de animalitos por especie:

mysql> SELECT especie, COUNT(*) FROM mascotas GROUP BY especie ;
+-----------+----------+
| especie   | COUNT(*) |
+-----------+----------+
| Ave       | 2        |
| Gato      | 2        |
| Hamster   | 1        |
| Perro     | 3        |
| Serpiente | 1        |
+-----------+----------+
5 rows in set (0.00 sec)

El número de animalitos por sexo:

mysql> SELECT sexo, COUNT(*) FROM mascotas GROUP BY sexo:
+------+----------+
| sexo | COUNT(*) |
+------+----------+
| NULL | 1        |
| f    | 4        |
| m    | 4        |
+------+----------+
3 rows in set (0.01 sec)

El número de animalitos por combinación de especie y sexo:

mysql> SELECT especie, sexo, COUNT(*) FROM mascotas GROUP BY especie, sexo ;
+-----------+------+----------+
| especie   | sexo | COUNT(*) |
+-----------+------+----------+
| Ave       | NULL | 1        |
| Ave       | f    | 1        |
| Gato      | f    | 1        |
| Gato      | m    | 1        |
| Hamster   | f    | 1        |
| Perro     | f    | 1        |
| Perro     | m    | 2        |
| Serpiente | m    | 1        |
+-----------+------+----------+
8 rows in set (0.00 sec)

No es necesario que se obtengan todos los datos de una tabla cuando se usa la función COUNT(). Por ejemplo, en la consulta anterior, para ver únicamente los datos de perritos y gatitos, la consulta queda de la siguiente manera:

mysql> SELECT especie, sexo, COUNT(*) FROM mascotas
 -> WHERE especie="Perro" OR especie="Gato"
 -> GROUP BY especie, sexo;
+---------+------+----------+
| especie | sexo | COUNT(*) |
+---------+------+----------+
| Gato    | f    | 1        |
| Gato    | m    | 1        |
| Perro   | f    | 1        |
| Perro   | m    | 2        |
+---------+------+----------+
4 rows in set (0.00 sec)

O bien, si deseamos el número de animalitos por sexo, y cuyo sexo es conocido:

mysql> SELECT especie, sexo, COUNT(*) FROM mascotas
 -> WHERE sexo IS NOT NULL
 -> GROUP BY especie, sexo ;
+-----------+------+----------+
| especie   | sexo | COUNT(*) |
+-----------+------+----------+
| Ave       | f    | 1        |
| Gato      | f    | 1        |
| Gato      | m    | 1        |
| Hamster   | f    | 1        |
| Perro     | f    | 1        |
| Perro     | m    | 2        |
| Serpiente | m    | 1        |
+-----------+------+----------+
7 rows in set (0.00 sec)

4592 visitas desde el 27-04-2019

AnteriorPosterior