32 - Agrupar registros (group 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. 1- Cree la tabla con la siguiente estructura: create table visitantes( nombre varchar(30), edad smallint, sexo char(1) default 'f', domicilio varchar(30), ciudad varchar(20) default 'Cordoba', telefono varchar(11), mail varchar(30) default 'no tiene', montocompra decimal (6,2) ); 2- Ingrese algunos registros: insert into visitantes values ('Susana Molina',35,default,'Colon 123',default,null,null,59.80); insert into visitantes values ('Marcos Torres',29,'m',default,'Carlos Paz',default,'marcostorres@hotmail.com',150.50); insert into visitantes values ('Mariana Juarez',45,default,default,'Carlos Paz',null,default,23.90); insert into visitantes (nombre, edad,sexo,telefono, mail) values ('Fabian Perez',36,'m','4556677','fabianperez@xaxamail.com'); insert into visitantes (nombre, ciudad, montocompra) values ('Alejandra Gonzalez','La Falda',280.50); insert into visitantes (nombre, edad,sexo, ciudad, mail,montocompra) values ('Gaston Perez',29,'m','Carlos Paz','gastonperez1@gmail.com',95.40); insert into visitantes values ('Liliana Torres',40,default,'Sarmiento 876',default,default,default,85); insert into visitantes values ('Gabriela Duarte',21,null,null,'Rio Tercero',default,'gabrielaltorres@hotmail.com',321.50); 3- Queremos saber la cantidad de visitantes de cada ciudad utilizando la cláusula "group by" (4 filas devueltas) 4- Queremos la cantidad visitantes con teléfono no nulo, de cada ciudad (4 filas devueltas) 5- Necesitamos el total del monto de las compras agrupadas por sexo (3 filas) 6- Se necesita saber el máximo y mínimo valor de compra agrupados por sexo y ciudad (6 filas) 7- Calcule el promedio del valor de compra agrupados por ciudad (4 filas) 8- Cuente y agrupe por ciudad sin tener en cuenta los visitantes que no tienen mail (3 filas)Ver solución
drop table if exists visitantes; create table visitantes( nombre varchar(30), edad smallint, sexo char(1) default 'f', domicilio varchar(30), ciudad varchar(20) default 'Cordoba', telefono varchar(11), mail varchar(30) default 'no tiene', montocompra decimal (6,2) ); insert into visitantes values ('Susana Molina',35,default,'Colon 123',default,null,null,59.80); insert into visitantes values ('Marcos Torres',29,'m',default,'Carlos Paz',default,'marcostorres@hotmail.com',150.50); insert into visitantes values ('Mariana Juarez',45,default,default,'Carlos Paz',null,default,23.90); insert into visitantes (nombre, edad,sexo,telefono, mail) values ('Fabian Perez',36,'m','4556677','fabianperez@xaxamail.com'); insert into visitantes (nombre, ciudad, montocompra) values ('Alejandra Gonzalez','La Falda',280.50); insert into visitantes (nombre, edad,sexo, ciudad, mail,montocompra) values ('Gaston Perez',29,'m','Carlos Paz','gastonperez1@gmail.com',95.40); insert into visitantes values ('Liliana Torres',40,default,'Sarmiento 876',default,default,default,85); insert into visitantes values ('Gabriela Duarte',21,null,null,'Rio Tercero',default,'gabrielaltorres@hotmail.com',321.50); select ciudad, count(*) from visitantes group by ciudad; select ciudad, count(telefono) from visitantes group by ciudad; select sexo, sum(montocompra) from visitantes group by sexo; select sexo,ciudad, max(montocompra) as mayor, min(montocompra) as menor from visitantes group by sexo,ciudad; select ciudad, avg(montocompra) as promediodecompras from visitantes group by ciudad; select ciudad, count(*) as cantidadconmail from visitantes where mail is not null and mail<>'no tiene' group by ciudad;
Una empresa almacena los datos de sus empleados en una tabla "empleados". 1- Cree la tabla: create table empleados( nombre varchar(30), documento char(8), domicilio varchar(30), seccion varchar(20), sueldo decimal(6,2), cantidadhijos smallint, fechaingreso date, primary key(documento) ); 2- Ingrese algunos registros: insert into empleados values('Juan Perez','22333444','Colon 123','Gerencia',5000,2,'1980-05-10'); insert into empleados values('Ana Acosta','23444555','Caseros 987','Secretaria',2000,0,'1980-10-12'); insert into empleados values('Lucas Duarte','25666777','Sucre 235','Sistemas',4000,1,'1985-05-25'); insert into empleados values('Pamela Gonzalez','26777888','Sarmiento 873','Secretaria',2200,3,'1990-06-25'); insert into empleados values('Marcos Juarez','30000111','Rivadavia 801','Contaduria',3000,0,'1996-05-01'); insert into empleados values('Yolanda Perez','35111222','Colon 180','Administracion',3200,1,'1996-05-01'); insert into empleados values('Rodolfo Perez','35555888','Coronel Olmedo 588','Sistemas',4000,3,'1996-05-01'); insert into empleados values('Martina Rodriguez','30141414','Sarmiento 1234','Administracion',3800,4,'2000-09-01'); insert into empleados values('Andres Costa','28444555',default,'Secretaria',null,null,null); 3- Cuente la cantidad de empleados agrupados por sección (5 filas) 4- Calcule el promedio de hijos por sección (5 filas) 5- Cuente la cantidad de empleados agrupados por año de ingreso (6 filas) 6- Calcule el promedio de sueldo por sección de los empleados con hijos (4 filas)
drop table if exists empleados; create table empleados( nombre varchar(30), documento char(8), domicilio varchar(30), seccion varchar(20), sueldo decimal(6,2), cantidadhijos smallint, fechaingreso date, primary key(documento) ); insert into empleados values('Juan Perez','22333444','Colon 123','Gerencia',5000,2,'1980-05-10'); insert into empleados values('Ana Acosta','23444555','Caseros 987','Secretaria',2000,0,'1980-10-12'); insert into empleados values('Lucas Duarte','25666777','Sucre 235','Sistemas',4000,1,'1985-05-25'); insert into empleados values('Pamela Gonzalez','26777888','Sarmiento 873','Secretaria',2200,3,'1990-06-25'); insert into empleados values('Marcos Juarez','30000111','Rivadavia 801','Contaduria',3000,0,'1996-05-01'); insert into empleados values('Yolanda Perez','35111222','Colon 180','Administracion',3200,1,'1996-05-01'); insert into empleados values('Rodolfo Perez','35555888','Coronel Olmedo 588','Sistemas',4000,3,'1996-05-01'); insert into empleados values('Martina Rodriguez','30141414','Sarmiento 1234','Administracion',3800,4,'2000-09-01'); insert into empleados values('Andres Costa','28444555',default,'Secretaria',null,null,null); select seccion, count(*) from empleados group by seccion; select seccion, avg(cantidadhijos) as promediodehijos from empleados group by seccion; select extract(year from fechaingreso), count(*) from empleados group by extract(year from fechaingreso); select seccion, avg(sueldo) as promediodesueldo from empleados where cantidadhijos>0 and cantidadhijos is not null group by seccion;