【发布时间】:2019-03-30 14:42:39
【问题描述】:
我使用 oracle 11g,所以我有 2 个表(员工、部门):
desc employees: desc departments
EMPLOYEE_ID DEPARTMENT_ID
FIRST_NAME DEPARTMENT_NAME
LAST_NAME MANAGER_ID
EMAIL LOCATION_ID
PHONE_NUMBER
HIRE_DATE
JOB_ID
SALARY
COMMISSION_PCT
MANAGER_ID
DEPARTMENT_ID
我想得到
employee_name,emp_names,emp_salary,dep_id,dep_names,每个人的最高工资 部门,每个部门的最低工资,以及每个部门的雇员人数 部门。
所以我这样做了:
select FIRST_NAME,DEPARTMENT_ID,max(SALARY),min(SALARY),count(EMPLOYEE_ID)
from employees join departments on employees.department_id = departments.departm
ent_id group by first_name,department_id;
但它给出了一个错误:
第 1 行出现错误:ORA-00918:列定义不明确
但是我的 sql 查询正确吗?
【问题讨论】:
-
emp_names应该在这里是什么,您能通过示例数据向我们展示一下吗? -
问题本身没有意义。如果您想要每个部门的最高工资,那么您必须单独按 DEPARTMENT_ID 分组,而不是按 FIRST_NAME 和 DEPARTMENT_ID 分组。很好,但是你应该为 EMP_NAMES 显示什么?在同一个查询中按部门显示 FIRST_NAME 和 max(SALARY) 是没有意义的。请你的老师澄清。也许他们想要一个单一的、以逗号分隔的部门中所有姓名的列表,在一个字符串中?
-
@mathguy,@tim emp_names is first_name for employee ,你的意思是我的整个代码都无效???
-
正如目前所写的那样,代码是无效的,因为在 GROUP BY 中,您给出了两个表中都存在的列的名称。您必须使用表名限定该列名。然后,您将在 SELECT 子句中收到相同的错误(出于相同的原因,并以相同的方式修复它)。之后查询将起作用,但它会给你错误的答案,因为你是按名字和部门 ID 分组的 - 所以你会得到,例如,在部门 50 工作的所有名为 JOHN 的员工的最高薪水. 查询是“有效的”,但不能正确解决您的问题。