2013-03-14 295 views
0

我給出這個模式的部門:MySQL查詢發現與員工的最低平均年齡

Emp(eid: integer,ename: string,age: integer,salary: real) 
Works(eid:integer,did: integer,pct_time: integer) 
Dept(did:integer,budget: real,managerid:integer) 

我寫此查詢列出了部門代碼與員工蠻好的平均年齡一起:

SELECT d.did AS Department, AVG(e.age) AS Average_Age 
FROM Emp e, Works w, Dept d 
WHERE e.eid=w.eid AND w.did=d.did 
GROUP BY d.did 

然而,當我嘗試做這樣的事情:

SELECT Department, MIN(Average_Age) 
FROM 
(
SELECT d.did AS Department, AVG(e.age) AS Average_Age 
WHERE e.eid=w.eid AND w.did=d.did 
GROUP BY d.did 
) MyTable 

它返回WRO部門編號。它僅爲該列返回0,但它返回上一個表的最小年齡。但是,年齡最小的部門ID是4.我做錯了什麼?

+0

只是有點現有的(工作)查詢?例如。最後加入'ORDER BY Average_Age LIMIT 1'。 – eggyal 2013-03-14 20:35:45

+0

謝謝你的作品,但你能解釋爲什麼嗎? – Watabou 2013-03-14 20:42:26

+0

這很基本。你知道哪些元素,哪些不是? – eggyal 2013-03-14 20:43:33

回答

0

請你試試這個:

SELECT department, MIN(avg_age) 
FROM 
(
    SELECT dept.did AS department, AVG(emp.age) AS avg_age FROM dept 
    LEFT JOIN works ON works.did = dept.did 
    LEFT JOIN emp ON emp.eid = works.eid 
    GROUP BY dept.did 
) AS test 
ORDER BY 1 LIMIT 1;