Pasamos a explicar el funcionamiento de las cláusulas GROUP BY y HAVING.
Con estas clausulas vamos a poder hacer consultas más complejas y avanzadas que nos permitiran filtrar mejor la información o sacar conjuntos de informaciones ordenadas de una determinada forma.
La sentencia select nos deja agrupar uno o más conjuntos de filas si utilizamos la cláusula gruop by por las columnas especificas y el orden especificado, siendo el formato el siguiente:
select ...
from ...
group by columna1, columna2, columnaN....
having condicion
order by....
Los datos seleccionados en la sentencia que lleva el group by deben ser o una constante, o una funcion de grupo o una columna que aparezca en el group by también.
En general group by lo utilizamos para calcular propiedades de uno o más conjuntos de filas.
La cláusula having es muy parecida a where pero funciona para grupos de filas y controla cúal de los conjuntos de filas se visualiza.
Os pongo un ejemplo para que se entienda mejor:
Visualizar el número de alumnos por cada asignatura si el departamento tiene mas de 4 alumnos.
select asignatura, count(*) from alumno group by asignatura having count(*) > 4;
También podriamos ordenar dicha consulta añadiendo un order by al final, por ejemplo por asignatura, quedando asi la consulta:
select asignatura, count(*) from alumno group by asignatura having count(*) > 4 order by asignatura;
Podemos realizar consultas un poco más complicadas utilizando también funciones de grupo. Por ejemplo:
Visualizar el número de departamento, la suma de los salarios, el salario máximo y el salario mínimo de cada departamento.
select departamento, sum(salario) as suma, max(salario) as maximo, min(salario) as minimo from empleado group by departamento;
Con esta sentencia nos saldrian 4 columnas, en la primera nos saldria el departamento, en la segunda la suma de todos los salarios de ese departamento, en la siguiente el salario más alto y el la última el salario más bajo del departamento.
Con estas cláusulas ya puedes realizar casi cualquier consulta, por lo que viene en próximos artículos ya es algo más complicado, pero nada imposible.
La sentencia select nos deja agrupar uno o más conjuntos de filas si utilizamos la cláusula gruop by por las columnas especificas y el orden especificado, siendo el formato el siguiente:
select ...
from ...
group by columna1, columna2, columnaN....
having condicion
order by....
Los datos seleccionados en la sentencia que lleva el group by deben ser o una constante, o una funcion de grupo o una columna que aparezca en el group by también.
En general group by lo utilizamos para calcular propiedades de uno o más conjuntos de filas.
La cláusula having es muy parecida a where pero funciona para grupos de filas y controla cúal de los conjuntos de filas se visualiza.
Os pongo un ejemplo para que se entienda mejor:
Visualizar el número de alumnos por cada asignatura si el departamento tiene mas de 4 alumnos.
select asignatura, count(*) from alumno group by asignatura having count(*) > 4;
También podriamos ordenar dicha consulta añadiendo un order by al final, por ejemplo por asignatura, quedando asi la consulta:
select asignatura, count(*) from alumno group by asignatura having count(*) > 4 order by asignatura;
Podemos realizar consultas un poco más complicadas utilizando también funciones de grupo. Por ejemplo:
Visualizar el número de departamento, la suma de los salarios, el salario máximo y el salario mínimo de cada departamento.
select departamento, sum(salario) as suma, max(salario) as maximo, min(salario) as minimo from empleado group by departamento;
Con esta sentencia nos saldrian 4 columnas, en la primera nos saldria el departamento, en la segunda la suma de todos los salarios de ese departamento, en la siguiente el salario más alto y el la última el salario más bajo del departamento.
Con estas cláusulas ya puedes realizar casi cualquier consulta, por lo que viene en próximos artículos ya es algo más complicado, pero nada imposible.