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;