sábado, 18 de abril de 2015

Funciones de agregado - Parte 1



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.

SELECT COUNT(*) AS [NUMERO DE EMPLEADOS], OFICIO,
AVG(SALARIO) AS [SALARIO MEDIO] FROM
EMP GROUP BY OFICIO HAVING OFICIO ='ANALISTA'



2. Encontrar el salario mas alto, mas bajo y la diferencia entre ambos de todos los empleados con oficio EMPLEADO.

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'



3. Visualizar los salarios mayores para cada oficio.

SELECT OFICIO, MAX(SALARIO) AS [SALARIO MÁXIMO] FROM EMP GROUP BY OFICIO



4. Visualizar el número de personas que realizan cada oficio en cada departamento.

SELECT DEPT_NO AS [Nº DE DEPARTAMENTO],
COUNT(*) AS [Nº DE PERSONAS], OFICIO
FROM EMP GROUP BY DEPT_NO, OFICIO
ORDER BY 1



5. Buscar aquellos departamentos con cuatro o mas personas trabajando.

SELECT DEPT_NO AS [Nº DE DEPARTAMENTO]
, COUNT(*) AS [Nº DE PERSONAS] FROM EMP
GROUP BY DEPT_NO HAVING COUNT(*) > 3



6. Mostrar el número de directores que existen por departamento.

SELECT COUNT(*) AS [NUMERO EMPLEADOS], DEPT_NO FROM EMP
WHERE OFICIO = 'DIRECTOR'
GROUP BY DEPT_NO



7. Visualizar el número de enfermeros, enfermeras e interinos que hay en la plantilla, ordenados por la función.

SELECT COUNT(*) AS [Nº DE PERSONAS], FUNCION FROM PLANTILLA
GROUP BY FUNCION
HAVING FUNCION IN ('ENFERMERO','ENFERMERA','INTERINO')
ORDER BY FUNCION



Espero haber ayudado en algo. Hasta la próxima oportunidad!









2 comentarios:

  1. Excelente Tutorial, es muy completo. Gracias por compartirlo.

    ResponderEliminar
    Respuestas
    1. Hola neruga, gracias por la visita y el aporte de tu comentario.
      Los mejores deseos! Hasta cualquier momento!

      Eliminar

       
free counters

Páginas vistas en total según Google