2011-09-15 117 views
2

我想包括dname,deptno,loc,加上ename并将colum标记为Number_of_People总计薪水标记Colum Total Salary然后加入部门表,我只想为部门30查询时出现问题

继承人的错误我得到

SQL> select dname,deptno, loc, count(ename) as Number_of_People, sum(sal) as Total_Salary from emp join dept on emp.deptno = dept.deptno group by dname,loc where deptno =30; 
select dname,deptno, loc, count(ename) as Number_of_People, sum(sal) as Total_Salary from emp join dept on emp.deptno = dept.deptno group by dname,loc where deptno =30 

                    * 
ERROR at line 1: 
ORA-00933: SQL command not properly ended 


SQL> 

EMP表;

SQL> select empno, ename, job, mgr, hiredate,comm, deptno from emp; 

EMPNO ENAME  JOB    MGR HIREDATE  COMM  DEPTNO 
---------- ---------- --------- ---------- --------- ---------- ---------- 
    7839 KING  PRESIDENT   17-NOV-81     10 
    7698 BLAKE  MANAGER   7839 01-MAY-81     30 
    7782 CLARK  MANAGER   7839 09-JUN-81     10 
    7566 JONES  MANAGER   7839 02-APR-81     20 
    7654 MARTIN  SALESMAN  7698 28-SEP-81  1400   30 
    7499 ALLEN  SALESMAN  7698 20-FEB-81  300   30 
    7844 TURNER  SALESMAN  7698 08-SEP-81   0   30 
    7900 JAMES  CLERK   7698 03-DEC-81     30 
    7521 WARD  SALESMAN  7698 22-FEB-81  500   30 
    7902 FORD  ANALYST   7566 03-DEC-81     20 
    7369 SMITH  CLERK   7902 17-DEC-80     20 

EMPNO ENAME  JOB    MGR HIREDATE  COMM  DEPTNO 
---------- ---------- --------- ---------- --------- ---------- ---------- 
    7788 SCOTT  ANALYST   7566 09-DEC-82     20 
    7876 ADAMS  CLERK   7788 12-JAN-83     20 
    7934 MILLER  CLERK   7782 23-JAN-82     10 

    14 rows selected. 

表部门;

SQL> select * from dept; 

    DEPTNO DNAME   LOC 
    ---------- -------------- ------------- 
    10 ACCOUNTING  NEW YORK 
    20 RESEARCH  DALLAS 
    30 SALES   CHICAGO 
    40 OPERATIONS  BOSTON 

回答

4

您需要where条款来了group by子句之前。

尝试:

select dname,deptno, loc 
, count(ename) as Number_of_People 
, sum(sal) as Total_Salary 
from emp join dept on emp.deptno = dept.deptno 
where deptno=30 
group by dname,loc; 
+0

我得到一个错误,当我按照你拥有的方式运行。第1行出现错误:ORA-00918:不明确定义的列 - – user770022

+0

在这种情况下,'emp'和'dept'中定义了'dname','deptno'或'loc'之一。选择你想要的那一个(例如,如果它是重复的'dname',选择你想要'emp.dname'还是'dept.dname')。 – 2011-09-15 02:23:45

+0

我已经发布了这两个表 – user770022

3

Where条款必须出现在group by条款。如果您需要在分组后做过滤,使用having

select dname, emp.deptno as deptno, loc, count(ename) as Number_of_People, 
    sum(sal) as Total_Salary from emp join dept on emp.deptno = dept.deptno 
    where emp.deptno =30 
    group by dname,loc ; 
+0

我得到一个错误,当我运行你的方式。第1行的错误: ORA-00918:列不明确定义 – user770022

+0

是的。你有两个deptno列。尽管它们都是相同的值(根据您的连接条件),但您必须告诉SQL您要返回哪一个值。我编辑了声明。 –

+0

我得到相同的错误 – user770022