Access 中的 Min() 子查询
Min() Subquery in Access
我的任务是显示该经理的最低薪员工的 MGR 和薪水。
我需要排除 MGR 未知的任何人,并排除最低工资低于 1000 美元的任何群体。结果应按薪水降序排列。
这里是 table:
+-------+--------+-----------+------+------------+-----------+-----------+------+
| Empno | Ename | Job | Mgr | Hiredate | Sal | Comm | Dept |
+-------+--------+-----------+------+------------+-----------+-----------+------+
| 7839 | KING | PRESIDENT | | 11/17/1981 | ,000.00 | [=10=].00 | 10 |
| 7782 | CLARK | MANAGER | 7839 | 6/9/1981 | ,450.00 | [=10=].00 | 10 |
| 7934 | MILLER | CLERK | 7782 | 1/23/1982 | ,300.00 | [=10=].00 | 10 |
| 7902 | FORD | ANALYST | 7566 | 12/3/1981 | ,000.00 | [=10=].00 | 20 |
| 7788 | SCOTT | ANALYST | 7566 | 12/9/1982 | ,000.00 | [=10=].00 | 20 |
| 7876 | ADAMS | CLERK | 7788 | 1/12/1983 | ,100.00 | [=10=].00 | 20 |
| 7369 | SMITH | CLERK | 7902 | 12/17/1980 | 0.00 | [=10=].00 | 20 |
| 7566 | JONES | MANAGER | 7839 | 4/2/1981 | [=10=].00 | [=10=].00 | 20 |
| 7698 | BLAKE | MANAGER | 7839 | 5/1/1981 | ,850.00 | [=10=].00 | 30 |
| 7499 | ALLEN | SALESMAN | 7698 | 2/20/1981 | ,600.00 | 0.00 | 30 |
| 7844 | TURNER | SALESMAN | 7698 | 9/8/1981 | ,500.00 | [=10=].00 | 30 |
| 7521 | WARD | SALESMAN | 7698 | 2/22/1981 | ,250.00 | 0.00 | 30 |
| 7654 | MARTIN | SALESMAN | 7698 | 9/28/1981 | ,250.00 | ,400.00 | 30 |
| 7900 | JAMES | CLERK | 7698 | 12/3/1981 | 0.00 | [=10=].00 | 30 |
+-------+--------+-----------+------+------------+-----------+-----------+------+
到目前为止,这是我的代码:
SELECT EMp.Mgr, EMp.Ename, EMp.Sal AS Sal
FROM EMp
GROUP BY EMp.Mgr, EMp.Ename, EMp.Sal
HAVING (((EMp.Mgr) Is Not Null) AND ((EMp.Sal)>1000))
ORDER BY EMp.Sal DESC;
我当前代码的问题是它没有考虑最低工资参数。我相信这需要通过使用子查询来完成,尽管我完全确定如何继续......
有人可以帮忙吗?
请尝试
with one as
(
SELECT EMp.Mgr,min(EMp.Sal) MinSlary
FROM EMp
GROUP BY EMp.Mgr
)
select a.Mgr,b.EName,b.Sal from one a
inner join Emp b on a.Mgr=b.Mgr and a.MinSlary=b.Sal
where a.Mgr is not null and a.MinSlary>1000
试试这个:
SELECT EMp.Mgr, EMp.Ename, EMp.Sal AS Sal
FROM EMp
WHERE emp.Sal = (select MIN(sal) from emp as emp2 where emp2.MGr = emp.Mgr and emp2.sal > 1000)
GROUP BY EMp.Mgr, EMp.Ename, EMp.Sal
HAVING EMp.Mgr Is Not Null
ORDER BY EMp.Sal DESC;
以下内容与杰拉德的回答密切相关,但解决了我在评论中提出的问题:
SELECT Emp.Mgr, Emp.Ename, Emp.Sal AS Sal
FROM Emp
WHERE Emp.Sal=(SELECT MIN(sal)
FROM Emp as Emp2
WHERE Emp2.MGr = Emp.Mgr
HAVING min(Emp2.sal) >= 1000)
GROUP BY Emp.Mgr, Emp.Ename, Emp.Sal
HAVING Emp.Mgr Is Not Null
ORDER BY Emp.Sal DESC;
使用您的样本数据,returns 与 Jerrad 相同的行,只是省略了经理 7839 或 7698 的行。除此之外,这两位管理人员的薪水为 0 美元和 950 美元。按照我解释原始问题 ("exclude any groups where the minimum salary is less than 00") 的方式,这些经理 应该 被排除在结果之外。
我的任务是显示该经理的最低薪员工的 MGR 和薪水。
我需要排除 MGR 未知的任何人,并排除最低工资低于 1000 美元的任何群体。结果应按薪水降序排列。
这里是 table:
+-------+--------+-----------+------+------------+-----------+-----------+------+
| Empno | Ename | Job | Mgr | Hiredate | Sal | Comm | Dept |
+-------+--------+-----------+------+------------+-----------+-----------+------+
| 7839 | KING | PRESIDENT | | 11/17/1981 | ,000.00 | [=10=].00 | 10 |
| 7782 | CLARK | MANAGER | 7839 | 6/9/1981 | ,450.00 | [=10=].00 | 10 |
| 7934 | MILLER | CLERK | 7782 | 1/23/1982 | ,300.00 | [=10=].00 | 10 |
| 7902 | FORD | ANALYST | 7566 | 12/3/1981 | ,000.00 | [=10=].00 | 20 |
| 7788 | SCOTT | ANALYST | 7566 | 12/9/1982 | ,000.00 | [=10=].00 | 20 |
| 7876 | ADAMS | CLERK | 7788 | 1/12/1983 | ,100.00 | [=10=].00 | 20 |
| 7369 | SMITH | CLERK | 7902 | 12/17/1980 | 0.00 | [=10=].00 | 20 |
| 7566 | JONES | MANAGER | 7839 | 4/2/1981 | [=10=].00 | [=10=].00 | 20 |
| 7698 | BLAKE | MANAGER | 7839 | 5/1/1981 | ,850.00 | [=10=].00 | 30 |
| 7499 | ALLEN | SALESMAN | 7698 | 2/20/1981 | ,600.00 | 0.00 | 30 |
| 7844 | TURNER | SALESMAN | 7698 | 9/8/1981 | ,500.00 | [=10=].00 | 30 |
| 7521 | WARD | SALESMAN | 7698 | 2/22/1981 | ,250.00 | 0.00 | 30 |
| 7654 | MARTIN | SALESMAN | 7698 | 9/28/1981 | ,250.00 | ,400.00 | 30 |
| 7900 | JAMES | CLERK | 7698 | 12/3/1981 | 0.00 | [=10=].00 | 30 |
+-------+--------+-----------+------+------------+-----------+-----------+------+
到目前为止,这是我的代码:
SELECT EMp.Mgr, EMp.Ename, EMp.Sal AS Sal
FROM EMp
GROUP BY EMp.Mgr, EMp.Ename, EMp.Sal
HAVING (((EMp.Mgr) Is Not Null) AND ((EMp.Sal)>1000))
ORDER BY EMp.Sal DESC;
我当前代码的问题是它没有考虑最低工资参数。我相信这需要通过使用子查询来完成,尽管我完全确定如何继续......
有人可以帮忙吗?
请尝试
with one as
(
SELECT EMp.Mgr,min(EMp.Sal) MinSlary
FROM EMp
GROUP BY EMp.Mgr
)
select a.Mgr,b.EName,b.Sal from one a
inner join Emp b on a.Mgr=b.Mgr and a.MinSlary=b.Sal
where a.Mgr is not null and a.MinSlary>1000
试试这个:
SELECT EMp.Mgr, EMp.Ename, EMp.Sal AS Sal
FROM EMp
WHERE emp.Sal = (select MIN(sal) from emp as emp2 where emp2.MGr = emp.Mgr and emp2.sal > 1000)
GROUP BY EMp.Mgr, EMp.Ename, EMp.Sal
HAVING EMp.Mgr Is Not Null
ORDER BY EMp.Sal DESC;
以下内容与杰拉德的回答密切相关,但解决了我在评论中提出的问题:
SELECT Emp.Mgr, Emp.Ename, Emp.Sal AS Sal
FROM Emp
WHERE Emp.Sal=(SELECT MIN(sal)
FROM Emp as Emp2
WHERE Emp2.MGr = Emp.Mgr
HAVING min(Emp2.sal) >= 1000)
GROUP BY Emp.Mgr, Emp.Ename, Emp.Sal
HAVING Emp.Mgr Is Not Null
ORDER BY Emp.Sal DESC;
使用您的样本数据,returns 与 Jerrad 相同的行,只是省略了经理 7839 或 7698 的行。除此之外,这两位管理人员的薪水为 0 美元和 950 美元。按照我解释原始问题 ("exclude any groups where the minimum salary is less than 00") 的方式,这些经理 应该 被排除在结果之外。