Problema:
Un profesor guarda los promedios de sus alumnos de un curso en una tabla llamada "alumnos" y las
notas de los mismos en la tabla "notas".
1- Elimine las tablas si existen.
2- Cree las tablas:
create table alumnos(
documento char(8) not null,
nombre varchar(30),
primary key(documento)
);
create table notas(
documento char(8) not null,
nota decimal(4,2) unsigned
);
3- Ingrese los siguientes registros:
insert into alumnos values('22333444','Juan Perez');
insert into alumnos values('23555666','Marina Herrero');
insert into alumnos values('24000333','Daniel Juarez');
insert into alumnos values('25222111','Hector Paz');
insert into notas values('22333444',7);
insert into notas values('23555666',8);
insert into notas values('24000333',3);
insert into notas values('25222111',7);
insert into notas values('22333444',7);
insert into notas values('23555666',9);
insert into notas values('24000333',4);
insert into notas values('22333444',6);
insert into notas values('23555666',10);
insert into notas values('24000333',3);
insert into notas values('25222111',9);
insert into notas values('23555666',10);
No todos los alumnos tienen la misma cantidad de notas porque algunos presentaron trabajos extras o
no asistieron a los examenes.
4- Muestre el documento del alumno, su nombre y el promedio; si el alumno tiene un promedio menor a
4, muestre un mensaje "reprobado", si el promedio es mayor o igual a 4 y menor a 7,
muestre "regular", si el promedio es mayor a 7, muestre "promocionado", usando "case":
select a.documento,a.nombre,avg(nota),
case when avg(nota)<4 then 'reprobado'
when avg(nota)>=4 and avg(nota)<7 then 'regular'
else 'promocionado' end as condicion
from alumnos as a
join notas as n
on a.documento=n.documento
group by n.documento;
5- Muestre el documento y nombre del alumno y con un "if" si el alumno está aprobado o no:
select a.documento,a.nombre,
if (avg(nota)>=4,'si','no') as aprobado
from alumnos as a
join notas as n
on a.documento=n.documento
group by n.documento;
6- Muestre el documento, nombre del alumno y con un "case", si tiene 1 nota, 2 notas o más de 2
notas:
select a.documento,a.nombre,
case count(*)
when 1 then '1 nota'
when 2 then '2 notas'
else 'mas de 2' end as 'cantidad de notas'
from alumnos as a
join notas as n
on a.documento=n.documento
group by n.documento
order by 'cantidad de notas';