SQL不是组表达式。找到教授他/她部门每门课程的教师

时间:2016-02-04 04:51:53

标签: sql oracle group-by

select instructor.name, instructor.id
from instructor,teaches,course
where instructor.id = teaches.ID and course.course_id = teaches.course_id
and instructor.dept_name = course.Dept_name
group by instructor.name

我是sql和嵌套查询的新手。我正在努力找到教师的姓名和身份证,他在自己的部门教授每门课程。

这是我到目前为止所拥有的。我想用group by来计算他们教的课程,并与该部门下的所有课程进行比较。但我坚持到这里,它说SQL错误:ORA-00979:不是GROUP BY表达式

我不知道如何处理这个问题。

teaches(ID, course id, sec id, semester, year)
course(course id, title, dept name, credits)
instructor(ID, name, dept name, salary)

我对聚合函数很困惑,如何通过表达式来表示有效的组。谁能帮我?

2 个答案:

答案 0 :(得分:1)

假设我正确理解你的数据库,这是另一种方法:

select i.id, i.deptname
from instructor i
  join teaches t on i.id = t.id
group by i.id, i.deptname
having count(*) = (
  select count(*)
  from course c 
  where c.deptname = i.deptname)

这使用更标准的join语法以及aggregation来检查教师教授的count课程与该特定部门的整体count相比较。< / p>

顺便说一句,您可能需要使用count(distinct courseid) - 取决于您的数据以及是否有重复数据。

答案 1 :(得分:0)

当你说每个时,我认为你的意思是所有部门的课程。试试这个:

SELECT instructor.name, instructor.id
  FROM instructor
 WHERE 0 = (CASE WHEN 
               ((SELECT COUNT(DISTINCT teaches.course_id)
                  FROM teaches
                 WHERE teaches.ID = instructor.id) = 
               (SELECT COUNT(DISTINCT course.course_id) 
                  FROM course 
                 WHERE course.Dept_name = instructor.dept_name)) THEN 0 ELSE 1 END);