1

鉴于此架构:

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

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

4

4 回答 4

0

这应该这样做。您需要创建一个具有 did 和 minimum age 的 subQuery,然后使用它来加入您现有的 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
于 2013-03-20T17:47:00.260 回答
0

尝试:

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
于 2013-03-20T18:29:05.577 回答
0

试试这个来显示来自每个本地的最年轻的员工:

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

于 2013-11-13T15:08:25.770 回答
0

我认为这会起作用:

SELECT e1.ename, e1.age, FROM Emp as e1, (SELECT eid, MinAge.did, MinAge.minage FROM Works, (SELECT did, MIN(age) as minage FROM Emp, Works where Emp.eid = Works.eid GROUP BY did) as MinAge WHERE Works.did = MinAge.did) as temp WHERE e1.eid = temp.eid AND e1.age = temp.minage;
于 2018-03-30T10:30:15.353 回答