GROUP BY en Oracle SQL

Hola a todos, hoy os voy a explicar como funciona la sentencia GROUP BY en Oracle.

Cuando usamos funciones de agrupamiento como COUNT, AVG, SUM, MIN o MAX necesitamos agrupar nuestros resultados con GROUP BY.

Cuando agrupamos, estamos indicando categorizando en diferentes grupos.

Si necesitas más detalles de las funciones de agrupamiento, puedes verlo aquí:

https://www.discoduroderoer.es/funciones-de-agrupamiento-en-oracle

Si ponemos alguna de estas funciones de agrupamiento con una columna más sin agrupar, nos saltará un error.

Veamos algunos ejemplos.

Teniendo esta base de datos:

Si queremos ver, el número de cursos de un determinado nivel:

SELECT nivel, Count(*)
FROM cursos
GROUP BY nivel;

Este es el resultado:

También es importante ver que aquello que estamos agrupando (nivel), también lo podemos poner en el SELECT, solo podemos poner aquellas columnas que estén en el GROUP BY o que usen una función de agrupación.

Si yo quisiera mostrar el número de alumnos para cada curso, lo haría así:

SELECT c.titulo, count(*) as num_alumnos
FROM cursos c, cursos_estudiantes ce
WHERE c.id = ce.ID_CURSO 
group by c.titulo
order by num_alumnos DESC;

Este es el resultado:

Fíjate que lo que estamos haciendo es agrupar por cada curso y para cada curso estamos mostrando cuantos alumnos tenemos inscritos.

Si queremos mostrar el número de clases de cada curso y cada sección.

SELECT c.titulo as curso, s.titulo as seccion, count(*) as num_clases
FROM cursos c, clases cl, secciones s
WHERE c.id = s.id_curso and s.id = cl.id_seccion
GROUP BY c.titulo, s.titulo;

Este es el resultado:

En este caso estamos agrupando por dos campos,  el titulo del curso y de la sección, por lo que estamos agrupando en dos niveles.

¿Quieres saber mas de SQL en Oracle? Tengo un curso en udemy con muchos ejercicios prácticos.

Espero que os sea de ayuda. Si tenéis dudas, preguntad. Estamos para ayudarte.

Compartir

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *