找工资总额小于20000的部门的工资额

时间:2016-06-09 19:45:22

标签: sql oracle11g sum subquery

我试图编写一个返回每个部门总薪水的查询。 所以它需要查看谁在一个部门工作并计算薪水并为每个部门执行此操作。然后它应该只显示总薪水低于20000的部门。

我的数据库看起来像这样

create table dept
(
    deptno number(2,0),
    dname  varchar2(14),
    loc    varchar2(13),

    constraint pk_dept primary key (deptno)
);

create table emp
(
    empno    number(4,0),
    ename    varchar2(10),
    job      varchar2(9),
    mgr      number(4,0),
    hiredate date,
    sal      number(7,2),
    comm     number(7,2),
    deptno   number(2,0),

    constraint pk_emp primary key (empno),
    constraint fk_deptno foreign key (deptno) references dept (deptno)
);

insert into dept
values(10, 'ACCOUNTING', 'NEW YORK');
insert into dept
values(20, 'RESEARCH', 'DALLAS');
insert into dept
values(30, 'SALES', 'CHICAGO');
insert into dept
values(40, 'OPERATIONS', 'BOSTON');

insert into emp
values(7839, 'KING', 'PRESIDENT', null, to_date('17-11-1981','dd-mm-yyyy'), 5000, null, 10);
insert into emp
values(7698, 'BLAKE', 'MANAGER', 7839, to_date('1-5-1981','dd-mm-yyyy'), 2850, null, 30);
insert into emp
values(7782, 'CLARK', 'MANAGER', 7839, to_date('9-6-1981','dd-mm-yyyy'), 2450, null, 10);
insert into emp
values(7566, 'JONES', 'MANAGER', 7839, to_date('2-4-1981','dd-mm-yyyy'), 2975, null, 20);
insert into emp
values(7788, 'SCOTT', 'ANALYST', 7566, to_date('13-JUL-87','dd-mm-rr') - 85, 3000, null, 20);
insert into emp
values(7902, 'FORD', 'ANALYST', 7566, to_date('3-12-1981','dd-mm-yyyy'), 3000, null, 20);
insert into emp
values(7369, 'SMITH', 'CLERK', 7902, to_date('17-12-1980','dd-mm-yyyy'), 800, null, 20);
insert into emp
values(7499, 'ALLEN', 'SALESMAN', 7698, to_date('20-2-1981','dd-mm-yyyy'), 1600, 300, 30);
insert into emp
values(7521, 'WARD', 'SALESMAN', 7698, to_date('22-2-1981','dd-mm-yyyy'), 1250, 500, 30);
insert into emp
values(7654, 'MARTIN', 'SALESMAN', 7698, to_date('28-9-1981','dd-mm-yyyy'), 1250, 1400, 30);
insert into emp
values(7844, 'TURNER', 'SALESMAN', 7698, to_date('8-9-1981','dd-mm-yyyy'), 1500, 0, 30);
insert into emp
values(7876, 'ADAMS', 'CLERK', 7788, to_date('13-JUL-87', 'dd-mm-rr') - 51, 1100, null, 20);
insert into emp
values(7900, 'JAMES', 'CLERK', 7698, to_date('3-12-1981','dd-mm-yyyy'), 950, null, 30);
insert into emp
values(7934, 'MILLER', 'CLERK', 7782, to_date('23-1-1982','dd-mm-yyyy'), 1300, null, 10);

我尝试使用此查询,但它一直告诉我name是无效的标识符。

SELECT 
    (SELECT d.dname 
     FROM dept d
     WHERE d.deptno = e.deptno) AS naam, 
    SUM(e.sal) AS sal 
FROM 
    emp e 
WHERE 
    sal < 20000 
GROUP BY  
    naam;

有谁知道我做错了什么?

1 个答案:

答案 0 :(得分:2)

使用内部联接并拥有

  SELECT d.dname, sum(e.sal)  sal
  FROM dept d 
  INNER JOIN  emp  e  on d.deptno = e.deptno
  GROUP BY d.dname
  HAVING sum(e.sal) < 20000