【问题标题】:A problem with a query查询有问题
【发布时间】:2011-09-15 02:15:03
【问题描述】:

我想包括 dname、deptno、loc,加起来 ename 并将列标记为 Number_of_People 总结工资标签列 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

【问题讨论】:

    标签: sql oracle sqlplus


    【解决方案1】:

    您需要将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;
    

    【讨论】:

    • 按照您的方式运行时出现错误。第 1 行出现错误:ORA-00918:列定义不明确 –
    • 在这种情况下,dname、deptno 或loc 之一在emp 和dept 中定义。选择您想要的(例如,如果重复的是dname,请选择您想要emp.dname 还是dept.dname)。
    • 您需要更改的只是将 emp.deptno 放在 select 中,而不仅仅是 deptno。由于在两者中都定义了它,它需要知道从哪个表中提取它。
    • SQL> select dname,deptno, loc, count(ename) as Number_of_People , sum(sal) as Total_Salary from emp join dept on dept.dname = emp.dname where deptno=30 group by dname,位置;
    • 这可能是因为您将相同的查询复制了两次。花点时间。呼吸。想想你在做什么。
    【解决方案2】:

    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 ;
    

    【讨论】:

    • 按照您的方式运行时出现错误。第 1 行出现错误:ORA-00918:列定义不明确
    • 是的。你有两个 deptno 列。即使它们都是相同的值(根据您的连接条件),您也必须告诉 SQL 您想要返回哪个值。我编辑了声明。
    • 您选择的其他列是否可能在两个表中?有趣的是,该错误的第一个谷歌结果返回了一个使用名为“emp”和“dept”的表的示例。
    • 找到了。在你的 where 子句中是“deptno”。
    • SQL> select dname,deptno, loc, count(ename) as Number_of_People , sum(sal) as Total_Salary from emp join dept on dept.dname = emp.dname where deptno=30 group by dname,位置;
    猜你喜欢
    • 1970-01-01
    • 2021-07-22
    • 1970-01-01
    • 2015-03-21
    • 2018-03-05
    • 1970-01-01
    • 2021-06-29
    相关资源
    最近更新 更多