71 - Función de control if con varias tablas.


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';



 


Retornar