Plsql 错误:ORA-00937
我想创建一个新部门的表。我有部门ID和部门名称,在部门表中Plsql 错误:ORA-00937,plsql,oracle10g,Plsql,Oracle10g,我想创建一个新部门的表。我有部门ID和部门名称,在部门表中 desc departments Name Null? Type ------------------------------- -------- ---- DEPARTMENT_ID NOT NULL NUMBER(4)
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分组。。可能重复是的,刚才我用您提到的代码自己解决了。谢谢