MySQL查询查找的姓名和年龄最小的员工的年龄在每个部门

MySQL查询查找的姓名和年龄最小的员工的年龄在每个部门

问题描述:

鉴于此架构: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 w.did, MIN(e.age) AS Youngest 
FROM Works w INNER JOIN Emp e USING (eid) 
GROUP BY w.did 

其中列出了最年轻的年龄每部。但是,我无法弄清楚如何得到每个具有上市年龄的人的姓名。我不能只将这个ename添加到这个查询中的SELECT列表中,因为这会返回错误的名字。

我刚试过这样的东西,但它不起作用。

SELECT e2.ename, e2.age, w2.did 
FROM Emp e2 INNER JOIN Works w2 USING (eid), 
    (
    SELECT w.did, MIN(e.age) AS Youngest 
    FROM Works w INNER JOIN Emp e USING (eid) 
    GROUP BY w.did 
    ) MyTable 
WHERE e2.eid = eid AND e2.age = Youngest 

它列出了同一部门的多个人。

尝试:

SELECT e2.ename, e2.age, w2.did 
FROM Emp e2 
JOIN Works w2 USING (eid) 
JOIN (SELECT w.did, MIN(e.age) AS Youngest 
     FROM Works w 
     INNER JOIN Emp e USING (eid) 
     GROUP BY w.did) sq 
    ON w2.did = sq.did and e2.age = sq.Youngest 

这应该这样做。您需要创建一个子查询有没有和最低年龄,然后用它来加入到您现有的表emp

SELECT w.did, ename, e.age AS Youngest 
FROM Works w 
    INNER JOIN (SELECT did, MIN(age) minage 
      FROM emp e INNER JOIN works w ON e.eid = w.eid 
      GROUP BY did) ea 
    INNER JOIN Emp e ON w.did = ea.did AND e.age = ea.minage 
+0

我想出了一些与您的返回相同数量的行的东西。不知道什么是更好的,但。其实这不起作用(不包括两个拼写错误)。它会为同一部门返回多个年龄不同的人。 – Watabou 2013-03-20 18:00:20

+0

我更新了我的答案。最后的加入应该是部门而不是员工 – 2013-03-20 18:37:16

试试这个从每个故里显示最年轻的emplyee :

select p.Nativeplace, p.Name, p.Dobirth from personal p having p.Dobirth=(select max(Dobirth) from personal p2 where p.Nativeplace=p2.Nativeplace group by p2.Nativeplace);