Listado completo de tutoriales
33 - Contar registros (count) |
Existen en MySQL funciones que nos permiten contar registros, calcular sumas, promedios, obtener valores máximos y mínimos. Veamos algunas de ellas.
Imaginemos que nuestra tabla "libros" contiene muchos registros. Para averiguar la cantidad sin necesidad de contarlos manualmente usamos la función "count()":
select count(*) from libros;
La función "count()" cuenta la cantidad de registros de una tabla, incluyendo los que tienen valor nulo.
Para saber la cantidad de libros de la editorial "Planeta" tipeamos:
select count(*) from libros where editorial='Planeta';
También podemos utilizar esta función junto con la clausula "where" para una consulta más específica. Por ejemplo, solicitamos la cantidad de libros que contienen la cadena "Borges":
select count(*) from libros where autor like '%Borges%';
Para contar los registros que tienen precio (sin tener en cuenta los que tienen valor nulo), usamos la función "count()" y en los paréntesis colocamos el nombre del campo que necesitamos contar:
select count(precio) from libros;
Note que "count(*)" retorna la cantidad de registros de una tabla (incluyendo los que tienen valor "null") mientras que "count(precio)" retorna la cantidad de registros en los cuales el campo "precio" no es nulo. No es lo mismo. "count(*)" cuenta registros, si en lugar de un asterisco colocamos como argumento el nombre de un campo, se contabilizan los registros cuyo valor en ese campo no es nulo.
Tenga en cuenta que no debe haber espacio entre el nombre de la función y el paréntesis, porque puede confundirse con una referencia a una tabla o campo. Las siguientes sentencias son distintas:
select count(*) from libros; select count (*) from libros;
La primera es correcta, la segunda incorrecta.
Ingresemos al programa "Workbench" y ejecutemos el siguiente bloque de instrucciones SQL para probar la función 'count':
drop table if exists libros; create table libros( codigo int unsigned auto_increment, titulo varchar(40) not null, autor varchar(30), editorial varchar(15), precio decimal(5,2) unsigned, cantidad mediumint unsigned, primary key(codigo) ); insert into libros (titulo,autor,editorial,precio,cantidad) values('El aleph','Borges','Planeta',15,100); insert into libros (titulo,autor,editorial,precio,cantidad) values('Martin Fierro','Jose Hernandez','Emece',22.20,200); insert into libros (titulo,autor,editorial,precio,cantidad) values('Antologia poetica','J.L. Borges','Planeta',40,150); insert into libros (titulo,autor,editorial,precio,cantidad) values('Aprenda PHP','Mario Molina','Emece',18.20,200); insert into libros (titulo,autor,editorial,precio,cantidad) values('Cervantes y el quijote','Bioy Casares- J.L. Borges','Paidos',36.40,100); insert into libros (titulo,autor,editorial,precio,cantidad) values('Manual de PHP', 'J.C. Paez', 'Paidos',30.80,120); insert into libros (titulo,autor,editorial,precio,cantidad) values('Harry Potter y la piedra filosofal','J.K. Rowling','Paidos',45.00,50); insert into libros (titulo,autor,editorial,precio,cantidad) values('Harry Potter y la camara secreta','J.K. Rowling','Paidos',46.00,100); insert into libros (titulo,autor,editorial,precio,cantidad) values('Alicia en el pais de las maravillas','Lewis Carroll','Paidos',null,200); select count(*) from libros; select count(*) from libros where editorial='Planeta'; select count(*) from libros where autor like '%Borges%'; select count(precio) from libros;
Que nos genera una salida similar a esta: