Consultas SQL Avanzadas para Gestión de Datos de Empleados y Nóminas

Enviado por Chuletator online y clasificado en Francés

Escrito el en español con un tamaño de 5,19 KB

Consultas SQL para Xestión de Horas e Nóminas

Este documento presenta unha serie de consultas SQL para a xestión de datos relacionados coas horas traballadas e o cálculo de nóminas en unha empresa.

1. Consultas de Horas Traballadas

38) Cantidade de horas traballadas na empresa

SELECT SUM(Hora_Tra) AS [Horas totais traballadas]
FROM HORA;

// Non precisa agrupación xa que actúa sobre o total.

39) Cantidade de horas traballadas por ano na empresa

SELECT ID_Ano, SUM(Hora_Tra) AS [Horas traballadas]
FROM HORA
GROUP BY ID_Ano;

40) Cantidade de horas traballadas na empresa no ano 2014

SELECT ID_Ano, SUM(Hora_Tra) AS [Horas traballadas]
FROM HORA
WHERE ID_Ano = 2014
GROUP BY ID_Ano;

// O filtro do ano sitúase na cláusula WHERE. Aínda que podería ir en HAVING, é máis efectivo na WHERE, xa que filtra os datos previamente e despois realiza os cálculos. Sempre que un filtro poida aplicarse tanto en WHERE como en HAVING, debe priorizarse a WHERE.

41) Cantidade de horas traballadas por cada traballador

SELECT EMP.Nome_Emp, SUM(Hora_Tra) AS [Horas traballadas]
FROM EMP INNER JOIN HORA ON EMP.ID_Emp = HORA.ID_Emp
GROUP BY EMP.ID_Emp, EMP.Nome_Emp;

// Agrupamos por ID_Emp e Nome_Emp (`GROUP BY EMP.ID_Emp, EMP.Nome_Emp`) para asegurar que non se sumen dous empregados co mesmo nome, pero só visualizamos o nome (`SELECT EMP.Nome_Emp`).

2. Consultas de Importe Cobrado e Nóminas

42) Importe cobrado por cada traballador

SELECT EMP.Nome, SUM (Hora_Tra * Prezo_Hora_Tra) AS [Importe Cobrado]
FROM (HORA INNER JOIN EMP ON HORA.ID_Emp = EMP.ID_Emp)
INNER JOIN CATEG ON EMP.Cat_Lab_Emp = CATEG.ID_Cat
GROUP BY EMP.ID_Emp, EMP.Nome;

43) Importe cobrado por cada traballador no ano 2014

SELECT EMP.Nome, SUM (Hora_Tra * Prezo_Hora_Tra) AS [Importe Cobrado]
FROM (HORA INNER JOIN EMP ON HORA.ID_Emp = EMP.ID_Emp)
INNER JOIN CATEG ON EMP.Cat_Lab_Emp = CATEG.ID_Cat
WHERE ID_Ano = 2014
GROUP BY EMP.ID_Emp, EMP.Nome;

44) Importe total das nóminas de cada mes do 2014

SELECT ID_Mes, SUM (Hora_Tra * Prezo_Hora_Tra) AS [Importe Nominas Mes]
FROM (HORA INNER JOIN EMP ON HORA.ID_Emp = EMP.ID_Emp)
INNER JOIN CATEG ON EMP.Cat_Lab_Emp = CATEG.ID_Cat
WHERE ID_Ano = 2014
GROUP BY ID_Mes;

45) Importe das nóminas de cada mes do 2014 dos empregados con categoría de director de departamento (ID_Cat = 2)

SELECT ID_Mes, SUM (Hora_Tra * Prezo_Hora_Tra) AS [Importe Nominas Mes]
FROM (HORA INNER JOIN EMP ON HORA.ID_Emp = EMP.ID_Emp)
INNER JOIN CATEG ON EMP.Cat_Lab_Emp = CATEG.ID_Cat
WHERE ID_Ano = 2014 AND ID_Cat = 2
GROUP BY ID_Mes;

46) Importe das nóminas dos 6 primeiros meses do 2014

SELECT ID_Mes, SUM (Hora_Tra * Prezo_Hora_Tra) AS [Importe Nominas Mes]
FROM (HORA INNER JOIN EMP ON HORA.ID_Emp = EMP.ID_Emp)
INNER JOIN CATEG ON EMP.Cat_Lab_Emp = CATEG.ID_Cat
WHERE ID_Ano = 2014 AND ID_Mes < 7
GROUP BY ID_Mes;

// O filtro `ID_Ano = 2014` debe ir na cláusula WHERE, xa que non hai agrupación por ano. O filtro `ID_Mes` pode ir tanto na WHERE como na HAVING, aínda que a WHERE é a opción máis axeitada.

47) Importe cobrado por cada traballador no 2014, tendo en conta só os que cobraron menos de 40000

SELECT EMP.ID_Emp, SUM (Hora_Tra * Prezo_Hora_Tra) AS [Importe Cobrado no 2014]
FROM (HORA INNER JOIN EMP ON HORA.ID_Emp = EMP.ID_Emp)
INNER JOIN CATEG ON EMP.Cat_Lab_Emp = CATEG.ID_Cat
WHERE ID_Ano = 2014
GROUP BY EMP.ID_Emp
HAVING SUM (Hora_Tra * Prezo_Hora_Tra) < 40000;

// O filtro `SUM(Hora_Tra * Prezo_Hora_Tra) < 40000` debe ir na cláusula HAVING, xa que é un filtro que se aplica despois de realizar os cálculos de agregación.

48) Importe cobrado por cada traballador en cada ano, pero só nos anos 2013 e 2014 e para os que gañaron máis de 40000 en cada caso

SELECT EMP.ID_Emp, ID_Ano, SUM (Hora_Tra * Prezo_Hora_Tra) AS [Importe Cobrado]
FROM (HORA INNER JOIN EMP ON HORA.ID_Emp = EMP.ID_Emp)
INNER JOIN CATEG ON EMP.Cat_Lab_Emp = CATEG.ID_Cat
WHERE ID_Ano = 2013 OR ID_Ano = 2014
GROUP BY EMP.ID_Emp, ID_Ano
HAVING SUM (Hora_Tra * Prezo_Hora_Tra) > 40000;

Entradas relacionadas: