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
答
试试这个从每个故里显示最年轻的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);
我想出了一些与您的返回相同数量的行的东西。不知道什么是更好的,但。其实这不起作用(不包括两个拼写错误)。它会为同一部门返回多个年龄不同的人。 – Watabou 2013-03-20 18:00:20
我更新了我的答案。最后的加入应该是部门而不是员工 – 2013-03-20 18:37:16