30 - Funciones de grupo (count - max - min - sum - avg)


Problema:

Trabajamos con la tabla "libros" de una librería.

Eliminamos la tabla:

  drop table libros;

Creamos la tabla:

 create table libros(
  codigo number(4) not null,
  titulo varchar2(40) not null,
  autor varchar2(30) default 'Desconocido',
  editorial varchar2(15),
  edicion date,
  precio number(5,2),
  cantidad number(3),
  primary key(codigo)
 );

Ingresamos algunos registros:

 insert into libros
  values(1562,'El aleph','Borges','Planeta','10/10/1980',15,null);
 insert into libros
  values(1878,'Martin Fierro','Jose Hernandez','Emece',null,22.20,200);
 insert into libros
  values(2587,'Antologia poetica','J.L. Borges','Planeta',null,null,150);
 insert into libros
  values(3654,'Aprenda PHP','Mario Molina',null,'05/05/1999',18.20,null);
 insert into libros
  values(3921,'Cervantes y el quijote',default,'Paidos','15/02/2000',null,null);
 insert into libros
  values(4582,'Manual de PHP', 'J.C. Paez', 'Siglo XXI','21/04/2005',31.80,120);
 insert into libros
  values(5963,'Harry Potter y la piedra filosofal','J.K. Rowling',default,null,45.00,90);
 insert into libros
  values(6211,'Harry Potter y la camara secreta','J.K. Rowling','Emece',null,0,100);
 insert into libros
  values(8851,'Alicia en el pais de las maravillas','Lewis Carroll',null,null,null,220);
 insert into libros
  values(9920,'PHP de la A a la Z',default,default,default,null,0);

Para conocer la cantidad total de libros, sumamos las cantidades de cada uno:

 select sum(cantidad)
  from libros;

Retorna 880; verifique la suma, sumando los valores de todos los registros del campo "cantidad".

Queremos saber cuántos libros tenemos de la editorial "Emece":

 select sum(cantidad)
  from libros
  where editorial='Emece';

retorna 300.

Queremos saber el precio del libro más costoso; usamos la función "max()":

 select max(precio)
  from libros;

retorna 45.

Para conocer el precio mínimo de los libros de "Rowling" tipeamos:

 select min(precio)
  from libros
  where autor like '%Rowling%';

retorna 0 (cero).

Queremos saber el promedio del precio de los libros referentes a "PHP":

 select avg(precio)
  from libros
  where titulo like '%PHP%';

Devuelve 25. Note que hay 3 libros sobre "PHP", pero uno de ellos tiene precio nulo entonces Oracle no lo incluye para calcular el promedio.

Averiguamos el mínimo valor del campo "edicion":

 select min(edicion)
  from libros;

Retorna 10/10/80.

Necesitamos conocer el mayor valor de "codigo":

 select max(codigo)
  from libros;

Retorna 9920.

Ingresemos el siguiente lote de comandos en el Oracle SQL Developer:

 drop table libros;

 create table libros(
  codigo number(4) not null,
  titulo varchar2(40) not null,
  autor varchar2(30) default 'Desconocido',
  editorial varchar2(15),
  edicion date,
  precio number(5,2),
  cantidad number(3),
  primary key(codigo)
 );

 insert into libros
  values(1562,'El aleph','Borges','Planeta','10/10/1980',15,null);
 insert into libros
  values(1878,'Martin Fierro','Jose Hernandez','Emece',null,22.20,200);
 insert into libros
  values(2587,'Antologia poetica','J.L. Borges','Planeta',null,null,150);
 insert into libros
  values(3654,'Aprenda PHP','Mario Molina',null,'05/05/1999',18.20,null);
 insert into libros
  values(3921,'Cervantes y el quijote',default,'Paidos','15/02/2000',null,null);
 insert into libros
  values(4582,'Manual de PHP', 'J.C. Paez', 'Siglo XXI','21/04/2005',31.80,120);
 insert into libros
  values(5963,'Harry Potter y la piedra filosofal','J.K. Rowling',default,null,45.00,90);
 insert into libros
  values(6211,'Harry Potter y la camara secreta','J.K. Rowling','Emece',null,0,100);
 insert into libros
  values(8851,'Alicia en el pais de las maravillas','Lewis Carroll',null,null,null,220);
 insert into libros
  values(9920,'PHP de la A a la Z',default,default,default,null,0);

 select sum(cantidad)
  from libros;

 select sum(cantidad)
  from libros
  where editorial='Emece';

 select max(precio)
  from libros;

 select min(precio)
  from libros
  where autor like '%Rowling%';

 select avg(precio)
  from libros
  where titulo like '%PHP%';

 select min(edicion)
  from libros;

 select max(codigo)
  from libros;

Retornar