Problema:
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;
Otros problemas:
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';