Hola nuevamente!! Te recuerdo que para esta serie de ejercicios estamos utilizando la base de datos Hospital, la cual puedes descargarla desde el indice. Sin más que decir vayamos al punto.
Las funciones de agregado son funciones que se utilizan para calcular valores en las tablas. Si queremos usarlas combinándolas junto con otros campos debemos utilizar Group by y agrupar los datos que no son funciones.
Con la sentencia group by no se utiliza la clausula where, se utilizara una clausula propia de la expresión: HAVING. Equivalente a where
- COUNT: Cuenta los registros que hay en la consulta.
Si pongo un valor dentro de la expresión devolverá la cuenta de todos los registros no nulos.
Si pongo un asterisco contará todos los registros aunque tengan valores nulos.
select count(*) from emp: Valores con Nulos
select count(oficio) from emp: Valores sin nulos
- AVG: Realiza la media sobre la expresión dada, debe ser un tipo de dato Int.
select avg(salario) from emp
- MAX: Saca el valor máximo de una consulta.
select max(fecha_alt) from emp
- MIN: Devuelve el valor mínimo de una consulta.
select min(fecha_alt) from emp
- SUM: Devuelve la suma de los salarios
select sum(salario) from emp
Empecemos con los ejercicios :
1. Encontrar el salario medio de los analistas, mostrando el número de los empleados con oficio analista.
2. Encontrar el salario mas alto, mas bajo y la diferencia entre ambos de todos los empleados con oficio EMPLEADO.
3. Visualizar los salarios mayores para cada oficio.
4. Visualizar el número de personas que realizan cada oficio en cada departamento.
5. Buscar aquellos departamentos con cuatro o mas personas trabajando.
6. Mostrar el número de directores que existen por departamento.
7. Visualizar el número de enfermeros, enfermeras e interinos que hay en la plantilla, ordenados por la función.
Espero haber ayudado en algo. Hasta la próxima oportunidad!
1. Encontrar el salario medio de los analistas, mostrando el número de los empleados con oficio analista.
SELECT COUNT(*) AS [NUMERO DE EMPLEADOS], OFICIO, AVG(SALARIO) AS [SALARIO MEDIO] FROM EMP GROUP BY OFICIO HAVING OFICIO ='ANALISTA'
SELECT OFICIO, MAX(SALARIO) AS [SALARIO MAS ALTO] , MIN(SALARIO) AS [SALARIO MAS BAJO] , MAX(SALARIO) - MIN(SALARIO) AS [DIFERENCIA ENTRE AMBOS] FROM EMP GROUP BY OFICIO HAVING OFICIO = 'EMPLEADO'
SELECT OFICIO, MAX(SALARIO) AS [SALARIO MÁXIMO] FROM EMP GROUP BY OFICIO
SELECT DEPT_NO AS [Nº DE DEPARTAMENTO], COUNT(*) AS [Nº DE PERSONAS], OFICIO FROM EMP GROUP BY DEPT_NO, OFICIO ORDER BY 1
SELECT DEPT_NO AS [Nº DE DEPARTAMENTO] , COUNT(*) AS [Nº DE PERSONAS] FROM EMP GROUP BY DEPT_NO HAVING COUNT(*) > 3
SELECT COUNT(*) AS [NUMERO EMPLEADOS], DEPT_NO FROM EMP WHERE OFICIO = 'DIRECTOR' GROUP BY DEPT_NO
SELECT COUNT(*) AS [Nº DE PERSONAS], FUNCION FROM PLANTILLA GROUP BY FUNCION HAVING FUNCION IN ('ENFERMERO','ENFERMERA','INTERINO') ORDER BY FUNCION
Twittear
Excelente Tutorial, es muy completo. Gracias por compartirlo.
ResponderEliminarHola neruga, gracias por la visita y el aporte de tu comentario.
EliminarLos mejores deseos! Hasta cualquier momento!