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://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:
|
1 2 3 |
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í:
|
1 2 3 4 5 |
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.
|
1 2 3 4 |
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.
[ufwp id=»2402542″]Espero que os sea de ayuda. Si tenéis dudas, preguntad. Estamos para ayudarte.
Deja una respuesta