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.
Deja una respuesta