42 - Cláusulas compute y compute by |
Un comercio que tiene un stand en una feria registra en una tabla llamada "visitantes" algunos datos de las personas que visitan o compran en su stand para luego enviarle publicidad de sus productos.
Eliminamos la tabla si existe:
if object_id('visitantes') is not null drop table visitantes;
La creamos con la siguiente estructura:
create table visitantes( nombre varchar(30), edad tinyint, ciudad varchar(20), provincia varchar(20), mail varchar(30), montocompra decimal(6,2) );
Ingresamos algunos registros:
insert into visitantes values ('Susana Molina',28,'Cordoba','Cordoba','susanamolina@gmail.com',50); insert into visitantes values ('Marcela Mercado',36,'Carlos Paz','Cordoba',null,20); insert into visitantes values ('Alberto Garcia',35,'La Falda','Cordoba','albertgomgarcia@hotmail.com',30); insert into visitantes values ('Teresa Garcia',33,'Alta Gracia','Cordoba',null,120); insert into visitantes values ('Roberto Perez',45,'Alta Gracia','Cordoba','robertomarioperez@hotmail.com',30); insert into visitantes values ('Marina Torres',22,'Rosario','Santa Fe','marinatorres@xaxamail.com',90); insert into visitantes values ('Julieta Gomez',24,'Rosario','Santa Fe',null,50); insert into visitantes values ('Roxana Lopez',20,'Alta Gracia','Cordoba',null,200); insert into visitantes values ('Liliana Garcia',50,'Capital Federal','Buenos Aires','lilianagarcia@hotmail.com',40); insert into visitantes values ('Juan Torres',43,'Carlos Paz','Cordoba',null,10);
Veamos todos los datos de los visitantes y el promedio del monto de compra:
select *from visitantes compute avg(montocompra);
Empleamos dos cláusulas "compute" en una misma instrucción para averiguar el promedio de las edades y el total de los montos de las compras:
select edad,ciudad,montocompra from visitantes compute avg(edad),sum(montocompra);
Veamos la cantidad de visitantes por provincia y ciudad empleando "compute by". Recuerde que DEBE usarse "order by" y los campos que se incluyan luego de "by" deben estar en el "order by":
select nombre,ciudad,provincia from visitantes order by provincia,ciudad compute count(provincia) by provincia,ciudad;
Combinamos dos cláusulas "compute" con dos cláusulas "compute by" para averiguar el promedio de la compra y la cantidad por provincia y ciudad y el promedio de las edades y el total del monto de compras de todos los visitantes:
select *from visitantes order by provincia,ciudad compute avg(edad), sum(montocompra) compute avg(montocompra),count(provincia) by provincia,ciudad;