【问题标题】:need SQL help, Find names of all departments whose professors collectively teach less than 3 courses需要 SQL 帮助,查找教授集体教授的课程少于 3 门的所有部门的名称
【发布时间】:2022-01-24 18:54:33
【问题描述】:

表格:

  • 部门(dept_id,dept_name)
  • 学生(student_id、student_name、专业、水平、年龄)
  • 教授(prof_id、prof_name、dept_id)
  • 课程(课程代码、名称)
  • semester_course(course_code、季度、年份、prof_id)
  • 已注册(student_id、course_code、季度、年份、注册时间)

问题是查找教授总教数少于 3门课程

我的查询现在看起来像

select d.dept_name,d.dept_id FROM department as d 
WHERE d.dept_id in ( 
select d1.dept_id from department d1,professor p1 
where p1.dept_id = d1.dept_id AND p1.prof_id IN ( 
  select p2.prof_id from professor p2,semester_course sc
  WHERE sc.prof_id = p2.prof_id GROUP BY sc.course_code having count(*) < 3
) );

它会返回错误的结果,有什么帮助吗?

【问题讨论】:

  • 请学习使用 ANSI JOIN 而不是叉积。它使查询更易于阅读和编写。
  • 您不应该按课程代码分组。这是计算每门课程的教授人数,而不是教授教授的课程数量。
  • 您需要获取按部门分组的课程数量。
  • 所以我尝试了 GROUP BY p2.prof_id 的 count(*)
  • 再次阅读作业:“教授共同教授的课程少于3门的部门”。所以你需要COUNT(DISTINCT course_id)GROUP BY dept_id

标签: mysql sql database


【解决方案1】:

您应该加入所有三个表,departmentprofessorsemester_course。由于问题询问每个部门的课程数量,您应该使用GROUP BY d.dept_idCOUNT(DISTINCT sc.course_code) 来实现他们想要的标准。

SELECT d.dept_name
FROM department as d
JOIN professor AS p ON p.dept_id = d.dept_id
JOIN semester_course AS sc ON sc.prof_id = p.prof_id
GROUP BY d.dept_id 
HAVING COUNT(DISTINCT sc.course_code) < 3

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    相关资源
    最近更新 更多