2013-03-14 288 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;