2016-06-09 49 views
1

我正在嘗試編寫一個查詢,返回每個部門的總工資。 因此,需要看看誰在部門工作,並計算工資,併爲每個部門進行此項工作。然後,它應該只告訴我,有一個工資總額低於20000找到工資總額小於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; 

有誰知道我在做什麼錯?

+0

這DBMS你何用? –

+0

@MahediSabuj該死的我忘了提到那個。我正在使用一個oracle數據庫 – NoSixties

+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 
+0

當我運行這個時,我得到一個錯誤:'不是GROUP BY表達式' – NoSixties

+1

我已經稍微更新了答案。如果你再次得到這個錯誤,給我看看確切的錯誤信息 – scaisEdge

+0

HAVING sum(e.sal)<20000,ORACLE只能在ORDER中看到別名 – Mihai