Saltar a contenido

S5 · Ejercicios de agrupar y subconsultas

Usa la base de datos del instituto. Recuerda: el WHERE filtra filas antes de agrupar y el HAVING filtra grupos después.

Ejercicio S5.1

Contar. En una sola consulta: el número de alumnos (alumnos) y el número de alumnos con grupo (con_grupo).

Resultado esperado:

alumnos con_grupo
14 13

1 fila

Solución modelo (bloqueada)

🔒 La solución completa está bloqueada. Esto es solo un ejemplo de cómo empieza:

SELECT COUNT(*) AS alumnos, COUNT(id_grupo) AS con_grupo FROM alumnos;
-- ... (resto de la solución bloqueado)

Ejercicio S5.2

Resumen de notas. Nota mínima, máxima y media (con 2 decimales) de las notas de la convocatoria 1.

Resultado esperado:

minima maxima media
2.5 10.0 6.45

1 fila

Solución modelo (bloqueada)

🔒 La solución completa está bloqueada. Esto es solo un ejemplo de cómo empieza:

SELECT MIN(nota) AS minima, MAX(nota) AS maxima, ROUND(AVG(nota), 2) AS media FROM notas WHERE convocatoria = 1;
-- ... (resto de la solución bloqueado)

Ejercicio S5.3

Alumnos por ciudad. Cada ciudad con su número de alumnos, de más a menos alumnos (a igualdad, por ciudad).

Resultado esperado:

ciudad alumnos
Cádiz 5
Sevilla 4
Jerez 3
Málaga 2

4 filas

Solución modelo (bloqueada)

🔒 La solución completa está bloqueada. Esto es solo un ejemplo de cómo empieza:

SELECT ciudad, COUNT(*) AS alumnos FROM alumnos GROUP BY ciudad ORDER BY alumnos DESC, ciudad;
-- ... (resto de la solución bloqueado)

Ejercicio S5.4

Media por asignatura. Nombre de cada asignatura y su nota media (2 decimales) en la convocatoria 1, de la media más alta a la más baja.

Resultado esperado:

asignatura media
Entornos de Desarrollo 7.13
Sistemas Informáticos 7.13
Programación 6.67
Lenguajes de Marcas 6.63
Bases de Datos 5.81
Inglés Técnico 5.63

6 filas

Solución modelo (bloqueada)

🔒 La solución completa está bloqueada. Esto es solo un ejemplo de cómo empieza:

SELECT s.nombre AS asignatura, ROUND(AVG(n.nota), 2) AS media
FROM notas n
JOIN asignaturas s ON s.id = n.id_asignatura
WHERE n.convocatoria = 1
GROUP BY s.id, s.nombre
-- ... (resto de la solución bloqueado)

Ejercicio S5.5

Ciudades grandes. Las ciudades que tienen al menos 3 alumnos, con su número de alumnos.

Resultado esperado:

ciudad alumnos
Cádiz 5
Sevilla 4
Jerez 3

3 filas

Solución modelo (bloqueada)

🔒 La solución completa está bloqueada. Esto es solo un ejemplo de cómo empieza:

SELECT ciudad, COUNT(*) AS alumnos FROM alumnos GROUP BY ciudad HAVING COUNT(*) >= 3 ORDER BY alumnos DESC, ciudad;
-- ... (resto de la solución bloqueado)

Ejercicio S5.6

Alumnos por grupo. El nombre de cada grupo y cuántos alumnos tiene, ordenado por nombre de grupo.

Resultado esperado:

grupo alumnos
1DAM-A 4
1DAM-B 5
2DAM-A 4

3 filas

Solución modelo (bloqueada)

🔒 La solución completa está bloqueada. Esto es solo un ejemplo de cómo empieza:

SELECT g.nombre AS grupo, COUNT(*) AS alumnos
FROM alumnos a
JOIN grupos g ON g.id = a.id_grupo
GROUP BY g.id, g.nombre
ORDER BY g.nombre;
-- ... (resto de la solución bloqueado)

Ejercicio S5.7

Los mejores expedientes. Nombre, apellido y nota media (2 decimales) de los alumnos, usando solo la convocatoria 1, mostrando únicamente los que tienen una media de 7 o más. Ordena de mayor a menor media.

Resultado esperado:

nombre apellido media
Iván Torres 8.5
Marta Díaz 7.75
Raúl Campos 7.67
Lola Ortiz 7.5
Sara Vega 7.13
Luis Romero 7.0

6 filas

Solución modelo (bloqueada)

🔒 La solución completa está bloqueada. Esto es solo un ejemplo de cómo empieza:

SELECT a.nombre, a.apellido, ROUND(AVG(n.nota), 2) AS media
FROM alumnos a
JOIN notas n ON n.id_alumno = a.id
WHERE n.convocatoria = 1
GROUP BY a.id, a.nombre, a.apellido
-- ... (resto de la solución bloqueado)

Ejercicio S5.8

Asignaturas con muchos suspensos. Nombre de cada asignatura y su número de suspensos (nota menor de 5) en la convocatoria 1, mostrando solo las que tienen al menos 2.

Resultado esperado:

asignatura suspensos
Bases de Datos 5
Lenguajes de Marcas 2
Programación 2

3 filas

Solución modelo (bloqueada)

🔒 La solución completa está bloqueada. Esto es solo un ejemplo de cómo empieza:

SELECT s.nombre AS asignatura, COUNT(*) AS suspensos
FROM notas n
JOIN asignaturas s ON s.id = n.id_asignatura
WHERE n.convocatoria = 1 AND n.nota < 5
GROUP BY s.id, s.nombre
-- ... (resto de la solución bloqueado)

Ejercicio S5.9

Por encima de la media. id_alumno, id_asignatura y nota de las notas de la convocatoria 1 mayores que la media de esa misma convocatoria. Usa una subconsulta. Ordena de mayor a menor nota.

Resultado esperado:

id_alumno id_asignatura nota
6 3 10.0
5 4 9.5
6 1 9.5
12 5 9.5
1 3 9.0
8 2 9.0
… … …

26 filas (se muestran 6)

Solución modelo (bloqueada)

🔒 La solución completa está bloqueada. Esto es solo un ejemplo de cómo empieza:

SELECT id_alumno, id_asignatura, nota
FROM notas
WHERE convocatoria = 1
  AND nota > (SELECT AVG(nota) FROM notas WHERE convocatoria = 1)
ORDER BY nota DESC, id_alumno;
-- ... (resto de la solución bloqueado)

Ejercicio S5.10

Con algún suspenso. Nombre y apellido de los alumnos que han sacado alguna nota menor de 5 en cualquier convocatoria. Usa IN con una subconsulta. Ordena por apellido.

Resultado esperado:

nombre apellido
Ana Gil
Elena Marín
Pablo Núñez
Marcos Peña
Noa Prieto
Álex Roca
… …

8 filas (se muestran 6)

Solución modelo (bloqueada)

🔒 La solución completa está bloqueada. Esto es solo un ejemplo de cómo empieza:

SELECT nombre, apellido
FROM alumnos
WHERE id IN (SELECT id_alumno FROM notas WHERE nota < 5)
ORDER BY apellido;
-- ... (resto de la solución bloqueado)

Ejercicio S5.11

Sin suspensos. Nombre y apellido de los alumnos que tienen notas en la convocatoria 1 pero ninguna menor de 5. Usa EXISTS y NOT EXISTS. Ordena por apellido.

Resultado esperado:

nombre apellido
Raúl Campos
Marta Díaz
Lola Ortiz
Luis Romero
Iván Torres

5 filas

Solución modelo (bloqueada)

🔒 La solución completa está bloqueada. Esto es solo un ejemplo de cómo empieza:

SELECT a.nombre, a.apellido
FROM alumnos a
WHERE EXISTS (SELECT 1 FROM notas n WHERE n.id_alumno = a.id AND n.convocatoria = 1)
  AND NOT EXISTS (SELECT 1 FROM notas n WHERE n.id_alumno = a.id AND n.convocatoria = 1 AND n.nota < 5)
ORDER BY a.apellido;
-- ... (resto de la solución bloqueado)

Ejercicio S5.12

⭐ Reto: la mejor nota de cada asignatura. Para cada asignatura (nombre), el nombre del alumno que sacó la nota más alta en la convocatoria 1 y esa nota. (Si hay empate, saldrán todos los empatados.) Pista: una subconsulta correlacionada con MAX.

Resultado esperado:

asignatura nombre nota
Bases de Datos Raúl 9.0
Entornos de Desarrollo Iván 10.0
Inglés Técnico Raúl 6.5
Lenguajes de Marcas Sara 9.5
Programación Iván 9.5
Sistemas Informáticos Marcos 9.5

6 filas

Solución modelo (bloqueada)

🔒 La solución completa está bloqueada. Esto es solo un ejemplo de cómo empieza:

SELECT s.nombre AS asignatura, a.nombre, n.nota
FROM notas n
JOIN alumnos a ON a.id = n.id_alumno
JOIN asignaturas s ON s.id = n.id_asignatura
WHERE n.convocatoria = 1
-- ... (resto de la solución bloqueado)