【问题标题】:Nested SQL Aggregate Function Query To Get Lowest Paid Employees Per Manager: My Query Is Not Working嵌套 SQL 聚合函数查询以获取每位经理的最低薪酬员工:我的查询不起作用
【发布时间】:2013-04-17 18:47:55
【问题描述】:

以下是我要回答的提示:

显示经理编号和该经理的最低薪员工的工资(仅) - 标记适当。不包括经理未知的员工的工资。排除此处的任何组,最低工资低于 1000 美元。首先列出最低工资。

以下是我的 EMPLOYEES 表:

create table EMPLOYEES
    (EmpID    char(4)         unique Not null,
     Ename    varchar(10),
     Job      varchar(9),
     MGR      char(4),
     Hiredate date,
     Salary   decimal(7,2),
     Comm     decimal(7,2),
     DeptNo   char(2)         not null,
         Primary key(EmpID),
         Foreign key(DeptNo) REFERENCES DEPARTMENTS(DeptNo));


insert into EMPLOYEES values (7839,'King','President',null,'17-Nov-11',5000,null,10);
insert into EMPLOYEES values (7698,'Blake','Manager',7839,'01-May-11',2850,null,30);
insert into EMPLOYEES values (7782,'Clark','Manager',7839,'02-Jun-11',2450,null,10);
insert into EMPLOYEES values (7566,'Jones','Manager',7839,'02-Apr-11',2975,null,20);
insert into EMPLOYEES values (7654,'Martin','Salesman',7698,'28-Feb-12',1250,1400,30);
insert into EMPLOYEES values (7499,'Allen','Salesman',7698,'20-Feb-11',1600,300,30);
insert into EMPLOYEES values (7844,'Turner','Salesman',7698,'08-Sep-11',1500,0,30);
insert into EMPLOYEES values (7900,'James','Clerk',7698,'22-Feb-12',950,null,30);
insert into EMPLOYEES values (7521,'Ward','Salesman',7698,'22-Feb-12',1250,500,30);
insert into EMPLOYEES values (7902,'Ford','Analyst',7566,'03-Dec-11',3000,null,20);
insert into EMPLOYEES values (7369,'Smith','Clerk',7902,'17-Dec-10',800,null,20);
insert into EMPLOYEES values (7788,'Scott','Analyst',7566,'09-Dec-12',3000,null,20);
insert into EMPLOYEES values (7876,'Adams','Clerk',7788,'12-Jan-10',1100,null,20);
insert into EMPLOYEES values (7934,'Miller','Clerk',7782,'23-Jan-12',1300,null,10);

以下是我的查询:

select empid, salary
from employees
where salary in
(select MIN(salary)
from employees
where empid in
(select empid
from EMPLOYEES
where JOB != 'manager'))
order by Salary asc; 

结果只有经理以外的薪水最低的人。我需要每位经理薪酬最低的员工,包括总裁领导下薪酬最低的经理。

【问题讨论】:

    标签: sql sql-server-2008 subquery


    【解决方案1】:
    select empid, salary
    from employees
    where salary in
    (select MIN(salary)
    from employees
    where empid in
    (select empid
    from EMPLOYEES
    where JOB != 'manager'
     group by EmpID
     )
     and
     JOB != 'manager' and MGR is not null
     group by mgr
     )
    order by Salary asc;
    

    【讨论】:

    • 这是我正在寻找的格式。我如何只列出工资 >= $1000
    • 在按 EmpID 分组后添加 MIN(salary)>=1000
    • 谢谢。我的大脑被炸了,我已经写了几个小时的 SQL 语句。我正在自己学习这些嵌套聚合函数。它开始让我感到沮丧。能否请您解释一个简单的方法让我知道如何编写嵌套聚合?
    • 您可以一一最小化您的搜索条件!如果你把它做成巨型,那么你可能会发现它很困难。我对您的查询所做的是我首先执行了“从 EMPLOYEES 中选择 empid,其中 JOB != 'manager'”。然后我尝试使用第二个括号,即从 empid 所在的员工中选择 MIN(salary)(从 JOB != 'manager' 的 EMPLOYEES 中选择 empid)等等。并且您必须有接触才能学习 SQL。你可以继续练习,你可以每天提高你的技能!我就是这样做的!您也可以浏览一些在线教程。希望对您有所帮助。
    • 啊啊啊!你先用你知道的。然后你的出路。通过更简单的嵌套查询,我只是查看表格并从外到内。谢谢您的帮助!一些回答者给我留下了虚假的帮助
    【解决方案2】:

    试试这个:

    select MGR, MIN(salary)
    from EMPLOYEES e
    where Salary >= 1000 and MGR is not null
    group by mgr
    order by MIN(salary) 
    

    或许:

    select MGR, MIN(salary)
    from EMPLOYEES e
    where  MGR is not null
    group by mgr
    having min(salary) >= 1000
    order by MIN(salary) 
    

    我不清楚“排除此处最低工资低于 1000 美元的任何群体”的说法。

    【讨论】:

    • 我不得不假设我不知道薪水
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-25
    相关资源
    最近更新 更多