我有这3张桌子:
EMPLOYEES
Emp_id PK || First_Name || Last_Name || Hiring_Date
Department
Dep_Name || emp_id
SALARIES
salary || emp_id
两个月前,该公司聘请了新员工。
我需要编写一个SQL语句,该语句计算雇用了多少员工。在 SAME声明中,我需要了解一下,在新的招聘之后,每个部门的财务增长是多少。
首先,我认为这是查询:
SELECT COUNT(emp_id) FROM employees
WHERE YEAR(NOW()) - YEAR(hiring_date) = 0 AND (MONTH(NOW()) - MONTH(hiring_date) = 2 OR MONTH(NOW()) - MONTH(hiring_date) = - 2);
但是,我不知道如何提取第二件事的信息。 (我知道我需要加入,但我不知道如何提取每个部门的增加 )
再次,第1和第2必须是相同的SQL语句。
答案 0 :(得分:1)
此变体需要所有三个表。它使用标准SQL间隔符号;没有多少DBMS实际上支持它,但当当前日期是1月而问题的版本没有时,这可以工作:
SELECT Dep_Name, COUNT(*), SUM(SALARY)
FROM Employees AS E NATURAL JOIN Salaries AS S ON E.Emp_ID = S.Emp_ID
NATURAL JOIN Department AS D ON E.Emp_ID = D.Emp_ID
WHERE CURRENT_DATE - Hiring_Date <= INTERVAL(2) MONTH
GROUP BY Dep_Name;
我注意到Department表有点不寻常 - 更常见的是,它会被称为Department_Emps;就其而言,它的主键是Emp_ID列,而不是Dep_Name列。
[对于记录,下面的查询是我在IBM Informix Dynamic Server中使用的。]
SELECT Dep_Name, COUNT(*), SUM(SALARY)
FROM employees AS E JOIN salaries AS S ON E.Emp_ID = S.Emp_ID
JOIN department AS D ON E.Emp_ID = D.Emp_ID
WHERE CURRENT YEAR TO DAY <= INTERVAL(2) MONTH TO MONTH + Hiring_Date
GROUP BY Dep_Name;
答案 1 :(得分:0)
SELECT COUNT(emp_id), SUM(salary)
FROM employees e JOIN salaries s ON (s.emd_id = e.emp_id)
WHERE YEAR(NOW()) - YEAR(hiring_date) = 0
AND (MONTH(NOW()) - MONTH(hiring_date) = 2
OR MONTH(NOW()) - MONTH(hiring_date) = - 2)