SQL问题:如何从这些表中提取此信息?

时间:2009-11-14 21:52:58

标签: sql

我有这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语句。

2 个答案:

答案 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)