50 - Combinaciones y funciones de agrupamiento |
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 y en otra tabla llamada "ciudades" los nombres de las ciudades. 1- Cree las tablas: create table visitantes( nombre varchar(30), edad smallint, sexo char(1) default 'f', domicilio varchar(30), codigociudad smallint not null, mail varchar(30), montocompra decimal (6,2) ); create table ciudades( codigo serial, nombre varchar(20), primary key(codigo) ); 2- Ingrese algunos registros: insert into ciudades(nombre) values('Cordoba'); insert into ciudades(nombre) values('Carlos Paz'); insert into ciudades(nombre) values('La Falda'); insert into ciudades(nombre) values('Cruz del Eje'); insert into visitantes values ('Susana Molina', 35,'f','Colon 123', 1, null,59.80); insert into visitantes values ('Marcos Torres', 29,'m','Sucre 56', 1, 'marcostorres@hotmail.com',150.50); insert into visitantes values ('Mariana Juarez', 45,'f','San Martin 111',2,null,23.90); insert into visitantes values ('Fabian Perez',36,'m','Avellaneda 213',3,'fabianperez@xaxamail.com',0); insert into visitantes values ('Alejandra Garcia',28,'f',null,2,null,280.50); insert into visitantes values ('Gaston Perez',29,'m',null,5,'gastonperez1@gmail.com',95.40); insert into visitantes values ('Mariana Juarez',33,'f',null,2,null,90); 3- Cuente la cantidad de visitas por ciudad mostrando el nombre de la ciudad (3 filas) 4- Muestre el promedio de gastos de las visitas agrupados por ciudad y sexo (4 filas) 5- Muestre la cantidad de visitantes con mail, agrupados por ciudad (3 filas) 6- Obtenga el monto de compra más alto de cada ciudad (3 filas)Ver solución
create table visitantes( nombre varchar(30), edad smallint, sexo char(1) default 'f', domicilio varchar(30), codigociudad smallint not null, mail varchar(30), montocompra decimal (6,2) ); create table ciudades( codigo serial, nombre varchar(20), primary key(codigo) ); insert into ciudades(nombre) values('Cordoba'); insert into ciudades(nombre) values('Carlos Paz'); insert into ciudades(nombre) values('La Falda'); insert into ciudades(nombre) values('Cruz del Eje'); insert into visitantes values ('Susana Molina', 35,'f','Colon 123', 1, null,59.80); insert into visitantes values ('Marcos Torres', 29,'m','Sucre 56', 1, 'marcostorres@hotmail.com',150.50); insert into visitantes values ('Mariana Juarez', 45,'f','San Martin 111',2,null,23.90); insert into visitantes values ('Fabian Perez',36,'m','Avellaneda 213',3,'fabianperez@xaxamail.com',0); insert into visitantes values ('Alejandra Garcia',28,'f',null,2,null,280.50); insert into visitantes values ('Gaston Perez',29,'m',null,5,'gastonperez1@gmail.com',95.40); insert into visitantes values ('Mariana Juarez',33,'f',null,2,null,90); select c.nombre, count(*) as cantidad from ciudades as c join visitantes as v on codigociudad=c.codigo group by c.nombre; select c.nombre,sexo, avg(montocompra) as promediodecompra from ciudades as c join visitantes as v on codigociudad=c.codigo group by c.nombre,sexo; select c.nombre, count(mail) as tienenmail from ciudades as c join visitantes as v on codigociudad=c.codigo group by c.nombre; select c.nombre, max(montocompra) from visitantes as v join ciudades as c on codigociudad=c.codigo group by c.nombre;