Listado completo de tutoriales
34 - Funciones de agrupamiento (count - max - min - sum - avg) |
Existen en MySQL funciones que nos permiten contar registros, calcular sumas, promedios, obtener valores máximos y mínimos. Ya hemos aprendido "count()", veamos otras.
La función "sum()" retorna la suma de los valores que contiene el campo especificado. Por ejemplo, queremos saber la cantidad de libros que tenemos disponibles para la venta:
select sum(cantidad) from libros;
También podemos combinarla con "where". Por ejemplo, queremos saber cuántos libros tenemos de la editorial "Planeta":
select sum(cantidad) from libros where editorial ='Planeta';
Para averiguar el valor máximo o mínimo de un campo usamos las funciones "max()" y "min()" respectivamente. Ejemplo, queremos saber cuál es el mayor precio de todos los libros:
select max(precio) from libros;
Queremos saber cuál es el valor mínimo de los libros de "Rowling":
select min(precio) from libros where autor like '%Rowling%';
La función avg() retorna el valor promedio de los valores del campo especificado. Por ejemplo, queremos saber el promedio del precio de los libros referentes a "PHP":
select avg(precio) from libros where titulo like '%PHP%';
Estas funciones se denominan "funciones de agrupamiento" porque operan sobre conjuntos de registros, no con datos individuales.
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 varias funciones de agrupamiento:
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 sum(cantidad) from libros; select sum(cantidad) from libros where editorial ='Planeta'; select max(precio) from libros; select * from libros order by precio desc; select min(precio) from libros where autor like '%Rowling%'; select * from libros where autor like '%Rowling%' order by 5; select avg(precio) from libros where titulo like '%PHP%'; select * from libros where titulo like '%PHP%'; select count(*) from libros; select count (*) from libros;
Que nos genera una salida similar a esta: