36 - Selección de un grupo de registros (having) |
Una empresa tiene registrados sus clientes en una tabla llamada "clientes". 1- Elimine la tabla "clientes", si existe. 2- Créela con la siguiente estructura: create table clientes ( codigo int unsigned auto_increment, nombre varchar(30) not null, domicilio varchar(30), ciudad varchar(20), provincia varchar (20), telefono varchar(11), primary key(codigo) ); 3- Ingrese algunos registros: insert into clientes (nombre,domicilio,ciudad,provincia,telefono) values ('Lopez Marcos', 'Colon 111', 'Córdoba','Cordoba','null'); insert into clientes (nombre,domicilio,ciudad,provincia,telefono) values ('Perez Ana', 'San Martin 222', 'Cruz del Eje','Cordoba','4578585'); insert into clientes (nombre,domicilio,ciudad,provincia,telefono) values ('Garcia Juan', 'Rivadavia 333', 'Villa Maria','Cordoba','4578445'); insert into clientes (nombre,domicilio,ciudad,provincia,telefono) values ('Perez Luis', 'Sarmiento 444', 'Rosario','Santa Fe',null); insert into clientes (nombre,domicilio,ciudad,provincia,telefono) values ('Pereyra Lucas', 'San Martin 555', 'Cruz del Eje','Cordoba','4253685'); insert into clientes (nombre,domicilio,ciudad,provincia,telefono) values ('Gomez Ines', 'San Martin 666', 'Santa Fe','Santa Fe','0345252525'); insert into clientes (nombre,domicilio,ciudad,provincia,telefono) values ('Torres Fabiola', 'Alem 777', 'Villa del Rosario','Cordoba','4554455'); insert into clientes (nombre,domicilio,ciudad,provincia,telefono) values ('Lopez Carlos', 'Irigoyen 888', 'Cruz del Eje','Cordoba',null); insert into clientes (nombre,domicilio,ciudad,provincia,telefono) values ('Ramos Betina', 'San Martin 999', 'Cordoba','Cordoba','4223366'); insert into clientes (nombre,domicilio,ciudad,provincia,telefono) values ('Lopez Lucas', 'San Martin 1010', 'Posadas','Misiones','0457858745'); 4- Obtenga el total de los registros agrupados por provincia: select provincia, count(*) from clientes group by provincia; 5- Obtenga el total de los registros agrupados por ciudad y provincia: select ciudad, provincia, count(*) from clientes group by ciudad,provincia; 6- Obtenga el total de los registros agrupados por ciudad y provincia sin considerar los que tienen menos de 2 clientes: select ciudad, provincia, count(*) from clientes group by ciudad,provincia having count(*)>1; 7- Obtenga el total de los registros sin teléfono nulo, agrupados por ciudad y provincia sin considerar los que tienen menos de 2 clientes: select ciudad, provincia, count(*) from clientes where telefono is not null group by ciudad,provincia having count(*)>1;
A) 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- Elimine la tabla "visitantes", si existe. 2- Créela con la siguiente estructura: create table visitantes( nombre varchar(30), edad tinyint unsigned, sexo char(1), domicilio varchar(30), ciudad varchar(20), telefono varchar(11), montocompra decimal(6,2) ); 3- Ingrese algunos registros: insert into visitantes (nombre,edad, sexo,domicilio,ciudad,telefono,montocompra) values ('Susana Molina', 28,'f','Colon 123','Cordoba',null,45.50); insert into visitantes (nombre,edad, sexo,domicilio,ciudad,telefono,montocompra) values ('Marcela Mercado',36,'f','Avellaneda 345','Cordoba','4545454',0); insert into visitantes (nombre,edad, sexo,domicilio,ciudad,telefono,montocompra) values ('Alberto Garcia',35,'m','Gral. Paz 123','Alta Gracia','03547123456',25); insert into visitantes (nombre,edad, sexo,domicilio,ciudad,telefono,montocompra) values ('Teresa Garcia',33,'f','Gral. Paz 123','Alta Gracia','03547123456',0); insert into visitantes (nombre,edad, sexo,domicilio,ciudad,telefono,montocompra) values ('Roberto Perez',45,'m','Urquiza 335','Cordoba','4123456',33.20); insert into visitantes (nombre,edad, sexo,domicilio,ciudad,telefono,montocompra) values ('Marina Torres',22,'f','Colon 222','Villa Dolores','03544112233',25); insert into visitantes (nombre,edad, sexo,domicilio,ciudad,telefono,montocompra) values ('Julieta Gomez',24,'f','San Martin 333','Alta Gracia','03547121212',53.50); insert into visitantes (nombre,edad, sexo,domicilio,ciudad,telefono,montocompra) values ('Roxana Lopez',20,'f','Triunvirato 345','Alta Gracia',null,0); insert into visitantes (nombre,edad, sexo,domicilio,ciudad,telefono,montocompra) values ('Liliana Garcia',50,'f','Paso 999','Cordoba','4588778',48); insert into visitantes (nombre,edad, sexo,domicilio,ciudad,telefono,montocompra) values ('Juan Torres',43,'m','Sarmiento 876','Cordoba','4988778',15.30); 4- Obtenga el total de las compras agrupados por ciudad y sexo: select ciudad, sexo, sum(montocompra) from visitantes group by ciudad, sexo; 5- Obtenga el total de las compras agrupados por ciudad y sexo, considerando sólo las sumas superiores a 50 pesos: select ciudad, sexo, sum(montocompra) from visitantes group by ciudad, sexo having sum(montocompra)>50; 6- Muestre el monto mayor de compra agrupado por ciudad, siempre que el valor supere los 30 pesos, considerando sólo los visitantes con telefono no nulo: select ciudad, max(montocompra) from visitantes where telefono is not null group by ciudad having max(montocompra)>30; 7- Agrupe por ciudad y muestre para cada grupo (ciudad) el total de visitantes, la suma de sus compras y el promedio de compras: select ciudad, count(*), sum(montocompra),avg(montocompra) from visitantes group by ciudad; B) En una página web se solicitan los siguientes datos para guardar información de sus visitas. 1- Elimine la tabla "visitas", si existe. 2- Créela con la siguiente estructura: create table visitas ( numero int unsigned auto_increment, nombre varchar(30) not null, mail varchar(50), pais varchar (20), puntaje tinyint unsigned, primary key(numero) ); El puntaje va de 0 a 10. 3- Ingrese algunos registros: insert into visitas (nombre,mail,pais,puntaje) values ('Ana Maria Lopez','AnaMaria@hotmail.com','Argentina',9); insert into visitas (nombre,mail,pais,puntaje) values ('Gustavo Gonzalez','GustavoGGonzalez@yahoo.com','Chile',8); insert into visitas (nombre,mail,pais,puntaje) values ('Juancito','JuanJosePerez@hotmail.com','Mexico',5); insert into visitas (nombre,mail,pais,puntaje) values ('Fabiola Martinez','MartinezFabiolaM@hotmail.com','Chile',9); insert into visitas (nombre,mail,pais,puntaje) values ('Fabiola Martinez',null,'Peru',8); insert into visitas (nombre,mail,pais,puntaje) values ('Mariana Torres','MarianitaTorres','Peru',7); 4- Muestre el promedio de los puntajes agrupados por pais, considerando sólo aquellos países que tiene más de 1 visita: select pais, avg(puntaje) from visitas group by pais having count(*)>=2; 5- Muestre el promedio de los puntajes agrupados por pais, considerando sólo aquellos países cuyo promedio es mayor a 8: select pais, avg(puntaje) from visitas group by pais having avg(puntaje)>8; C) Una empresa registra los datos de sus empleados en una tabla llamada "empleados". 1- Elimine la tabla "empleados" si existe: drop table if exists empleados; 2- Cree la tabla: create table empleados( documento char(8) not null, nombre varchar(30) not null, sexo char(1), domicilio varchar(30), fechaIngreso date, fechaNacimiento date, sueldoBasico decimal(5,2), primary key(documento) ); 3- Ingrese algunos registros: insert into empleados (documento,nombre,sexo,domicilio,fechaingreso,fechanacimiento,sueldobasico) values ('22333111','Juan Perez','m','Colon 123','1990-02-01','1970-05-10',550); insert into empleados (documento,nombre,sexo,domicilio,fechaingreso,fechanacimiento,sueldobasico) values ('25444444','Susana Morales','f','Avellaneda 345','1995-04-01','1975-11-06',650); insert into empleados (documento,nombre,sexo,domicilio,fechaingreso,fechanacimiento,sueldobasico) values ('20111222','Hector Pereyra','m','Caseros 987','1995-04-01','1965-03-25',510); insert into empleados (documento,nombre,sexo,domicilio,fechaingreso,fechanacimiento,sueldobasico) values ('30000222','Luis LUque','m','Urquiza 456','1980-09-01','1980-03-29',700); insert into empleados (documento,nombre,sexo,domicilio,fechaingreso,fechanacimiento,sueldobasico) values ('20555444','Maria Laura Torres','f','San Martin 1122','2000-05-15','1965-12-22',700); insert into empleados (documento,nombre,sexo,domicilio,fechaingreso,fechanacimiento,sueldobasico) values ('30000234','Alberto Soto','m','Peru 232','2003-08-15','1989-10-10',420); insert into empleados (documento,nombre,sexo,domicilio,fechaingreso,fechanacimiento,sueldobasico) values ('20125478','Ana Gomez','f','Sarmiento 975','2004-06-14','1976-09-21',350); insert into empleados (documento,nombre,sexo,domicilio,fechaingreso,fechanacimiento,sueldobasico) values ('24154269','Ofelia Garcia','f','Triunvirato 628','2004-09-23','1974-05-12',390); 4- La empresa festeja cada mes los cumpleaños de todos los empleados que cumplen ese mes. Queremos saber cuántos empleados cumplen años en los meses de agosto a diciembre: select month(fechanacimiento) as mes, count(*) as cantidad from empleados group by mes having mes>=8; 5- Se necesita conocer la cantidad de empleados agrupados por fecha de ingreso a la empresa sólo de las fechas posteriores a "1990-02-01": select fechaingreso,count(*) from empleados group by fechaingreso having fechaingreso>'1990-02-01';