Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL查询以查找每个部门中最年轻员工的姓名和年龄_Mysql_Database - Fatal编程技术网

MySQL查询以查找每个部门中最年轻员工的姓名和年龄

MySQL查询以查找每个部门中最年轻员工的姓名和年龄,mysql,database,Mysql,Database,鉴于此模式: 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

鉴于此模式:

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

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

这应该可以做到。您需要创建具有did和最小年龄的子查询,然后使用该子查询连接到现有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
尝试:


尝试此操作以显示来自每个本地的最年轻员工:

从个人p中选择p.Nativeplace、p.Name、p.Dobirth
让p.Dobirth=从个人p2中选择maxDobirth,其中p.Nativeplace=p2.Nativeplace分组由p2.Nativeplace进行分组

我认为这会奏效:

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;

我想出了一个与你的行数相同的方法。但不确定什么更好。事实上,这不算两个打字错误。它返回同一部门的多个不同年龄的人。我更新了我的答案。最后一次加入应在部门而不是员工上
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;