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)Si deseamos conocer cuántas
mascotas tiene cada uno de los propietarios, la consulta
es la siguiente:
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 clauseEn
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)
|