Code icon

MySQL - EJERCICIOS DE EXAMENES

Links


    //EJERCICIOS DE EXAMENES

    //--G1-¿Cuántas asignaturas DISTINTAS imparte cada profesor? Si da la misma asignatura a dos grupos, se considera la misma.
    select p.nombre ,p.idprofesor, COUNT( distinct idasignatura) from profesor p -- el count (distinct ...) no existe en todas las bases de datos, pero si en sqlserver
    left join AsignaturasGrupo ag on p.idProfesor=ag.idProfesor
    group by p.Nombre,p.idProfesor
    
    //--G2-¿Cuál es el alumno con mejor nota media del centro? (TOP 1).
    SELECT N.idAlumno, AVG(N.Nota) FROM Nota N
    GROUP BY N.idAlumno
    HAVING AVG(N.Nota) > ALL (SELECT AVG(N.Nota*1.0) FROM NOTA N GROUP BY N.idAlumno)
    
    select apellidos,NOMBRE from Alumno a
    inner join Nota n on a.idAlumno=n.idAlumno
    group by apellidos,nombre,a.idalumno
    having AVG(cast(Nota as float)) >= (select AVG(cast (nota as float)) from Nota group by idAlumno)
    
    SELECT TOP 1 AVG(Nota*1.0) FROM NOTA
    GROUP BY idAlumno
    ORDER BY 1 DESC;
    
    
    //--G3-¿Cuántos grupos tienen más de 30 alumnos? CUANTOS GRUPOS, contar grupos
    select COUNT(*) from Grupo g 
    where (select COUNT(*) from Alumno a where a.idGrupo=g. idGrupo) > 30
    
    //--G4-¿Cuál es el grupo con más alumnos?
    select idgrupo from Grupo g
    where (select COUNT(*) from Alumno a where g.idGrupo=a.idGrupo) >= all ( select COUNT(*)
    from Alumno group by idGrupo)
    
    //--G5-¿Cuál es el alumno con más asignaturas suspendidas?
    select apellidos,NOMBRE from Alumno a 
    where (select COUNT(*) from Nota n where n.idAlumno=a.idAlumno and Nota <5) 
    >= 
    all (select COUNT(*) from Nota where Nota < 5 group by idAlumno)
    
    //--G6-¿Cuál es el grupo que más profesores tiene. Si un profesor da dos asignaturas a un grupo se considera el mismo profesor.
    SELECT g.idgrupo from Grupo g
    inner join AsignaturasGrupo ag on g.idGrupo=ag.idGrupo
    group by g.idGrupo
    having COUNT(distinct idprofesor) >=  all (select COUNT( distinct idprofesor) from AsignaturasGrupo group by idGrupo)
    
    //--G7-¿Cuantas asignaturas se imparten a más de 100 alumnos?
    select COUNT(*) from Asignatura a
    where (select COUNT(*) from Nota n where a.idAsignatura=n.idAsignatura) > 100
    
    //--G8-De los alumnos que no son de Tacoronte, ¿Cuantos tienen al menos 3 asignaturas suspendidas?
    select apellidos,NOMBRE from Alumno a
    inner join Nota n on a.idAlumno=n.idAlumno
    where Nota < 5 and Municipio not like '%TACORONTE%'
    group by Apellidos,NOMBRE,a.idAlumno
    having COUNT(*) >= 3
    
    //--G9-¿Cuantos alumnos tienes al menos dos asignaturas suspendidas y una nota media superior a 5,5?
    select COUNT(*) from Alumno a
    where (select COUNT(*) from Nota n where a.idAlumno=n.idAlumno and Nota < 5) >= 2
    and
    ( select AVG(cast(Nota as float)) from Nota n where a.idAlumno=n.idAlumno) > 5.5
    
    
    
    ---------------------------
    //--EXTRA EJERCICIOS
    
    //--ALUMNOS CON MAS DE 5 ASIGNATURAS
    
    SELECT * FROM Alumno A
    WHERE (SELECT COUNT(N.idAsignatura) FROM Nota N WHERE idAlumno = A.idAlumno) > 10
    
    
    //--no clara, no tiene sentido el +
    SELECT apellidos, nombre FROM Alumno A
    WHERE (SELECT COUNT(N.idAsignatura) FROM Nota N WHERE idAlumno = A.idAlumno)
    + (SELECT COUNT(N.idAsignatura) FROM Nota N WHERE idAlumno = A.idAlumno and nota < 5) 
    > 10
    
    SELECT count(N.idAsignatura) FROM Nota N GROUP BY N.idAlumno;
    
    //--ALumnos con nota mayor que la media del grupo 811nma
    SELECT nombre, apellidos, (SELECT AVG(N.nota*1.0) FROM Nota N WHERE idAlumno = A.idAlumno)  'Nota Media'  FROM Alumno A
    WHERE (SELECT AVG(N.nota*1.0) FROM Nota N WHERE idAlumno = A.idAlumno) >
    (SELECT AVG(N.Nota*1.0) FROM Nota N INNER JOIN Alumno Al ON N.idAlumno = Al.idAlumno WHERE Al.idGrupo = '811nma')
    
    //--EXISTS
    //--IN (se usa con columna de datos, cuando se devuelven varias filas con un dato ?¿)
    //--EXISTS (tiene que haber una mínimo, se usa * ?¿ - Hay filas o no hay filas exists (Select * From laPepa...)
    
    //--SUBCONSULTAS EN HAVING
    //--GROUP BY HAVING count(*) > (....)
    
    //--WHERE por cada fila
    //--HAVING por cada grupo