Plsql 错误:ORA-00937

Plsql 错误:ORA-00937,plsql,oracle10g,Plsql,Oracle10g,我想创建一个新部门的表。我有部门ID和部门名称,在部门表中 desc departments Name Null? Type ------------------------------- -------- ---- DEPARTMENT_ID NOT NULL NUMBER(4)

我想创建一个新部门的表。我有部门ID和部门名称,在部门表中

            desc departments
            Name                            Null?    Type
            ------------------------------- -------- ----
            DEPARTMENT_ID                   NOT NULL NUMBER(4)
            DEPARTMENT_NAME                 NOT NULL VARCHAR2(30)
            MANAGER_ID                               NUMBER(6)
            LOCATION_ID                              NUMBER(4)
“我的员工”表包含:

            desc employees
            Name                            Null?    Type
            ------------------------------- -------- ----
            EMPLOYEE_ID                     NOT NULL NUMBER(6)
            FIRST_NAME                               VARCHAR2(20)
            LAST_NAME                       NOT NULL VARCHAR2(25)
            EMAIL                           NOT NULL VARCHAR2(25)
            PHONE_NUMBER                             VARCHAR2(20)
            HIRE_DATE                       NOT NULL DATE
            JOB_ID                          NOT NULL VARCHAR2(10)
            SALARY                                   NUMBER(8,2)
            COMMISSION_PCT                           NUMBER(2,2)
            MANAGER_ID                               NUMBER(6)
            DEPARTMENT_ID                            NUMBER(4)
现在,我想创建一个新部门表,该表应该包含部门ID和部门名称以及每个部门的总工资。每个部门都有一定数量的员工,因此,对于10、20、30等部门,应计算总工资

我的主要问题是:

           create table new_depts as
           select d.department_id,d.department_name,sum(e.salary) dept_sal
           from employees e,departments d
           where e.department_id = d.department_id;
我有一个错误:

           select d.department_id,d.department_name,sum(e.salary) dept_sal
              *
           ERROR at line 2:
           ORA-00937: not a single-group group function
所以,我用谷歌搜索了一下。我发现在select语句中不能使用sum、avg、max、min等组函数。我需要按子句分组。所以,我想单独解决这个问题。因此,我跳过了“CREATETABLE…”语句并写道:

           select distinct d.department_id,d.department_name,sum(e.salary) dept_sal
           from employees e,departments d
           where e.department_id = d.department_id
           group by department_id;         
我得到一个错误:

           group by department_id;
                  *
           ERROR at line 4:
           ORA-00911: invalid character      
然后我写道:

           select d.department_id,d.department_name,sum(e.salary) dept_sal
           from employees e,departments d
           where e.department_id = d.department_id
           group by d.department_id;
           select d.department_id,d.department_name,sum(e.salary) dept_sal
           from employees e,departments d
           where e.department_id = d.department_id
           group by department_id;
我得到一个错误:

           select d.department_id,d.department_name,sum(e.salary) dept_sal
                   *
           ERROR at line 1:
           ORA-00979: not a GROUP BY expression
           group by department_id
                   *
           ERROR at line 4:
           ORA-00918: column ambiguously defined
然后我写道:

           select d.department_id,d.department_name,sum(e.salary) dept_sal
           from employees e,departments d
           where e.department_id = d.department_id
           group by d.department_id;
           select d.department_id,d.department_name,sum(e.salary) dept_sal
           from employees e,departments d
           where e.department_id = d.department_id
           group by department_id;
我得到一个错误:

           select d.department_id,d.department_name,sum(e.salary) dept_sal
                   *
           ERROR at line 1:
           ORA-00979: not a GROUP BY expression
           group by department_id
                   *
           ERROR at line 4:
           ORA-00918: column ambiguously defined

我知道这是一个“加入”。但是我不知道我应该如何放置GROUPBY子句,这样我的GROUP函数才能正确运行

您需要按聚合函数中未包含的所有列进行分组,并且由于您已定义了表别名,因此必须在列中使用该别名。错误
ORA-00918:列定义模糊
是因为您有两列名为
部门id
,因此必须指定部门id来自的表:

select d.department_id,
  d.department_name,
  sum(e.salary) dept_sal
from employees e
inner join departments d
  on e.department_id = d.department_id
group by d.department_id, d.department_name;

您会注意到,我将查询更改为使用ANSI连接语法(
内部连接
)。

按部门id分组
不明确。您需要使用表别名。请尝试按d.department\u id分组。。可能重复是的,刚才我用您提到的代码自己解决了。谢谢