2009-11-14 82 views
0

我有這3個表:SQL問題:我如何從這些表中提取這些信息?

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); 

,但是,我不知道我怎麼能提取第二件事的信息。 (我知道我需要加入,但我不知道如何提取每個部門的增加

再次,第一個和第二個必須在IN SAME SQL STATEMENT中。

+0

什麼服務器?不同的服務器允許不同的方式來編寫SQL語句 – eKek0 2009-11-14 21:55:16

+0

讓我們來說說MySQL。 – 2009-11-14 22:00:28

回答

1

該變體需要全部三個表。它使用標準SQL間隔符號;沒有多少DBMS實際上支持它,但如果當前的日期是在一月和問題的版本沒有這個工程:

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_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; 
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)