2016-06-09 3 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 проклятый мой плохо забыл упомянуть об этом. Я использую базу данных оракула – 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 By – Mihai

Смежные вопросы