【发布时间】:2020-02-06 20:39:58
【问题描述】:
我是数据库的初学者,我有以下几点:我需要展示那些不正确学生数量最多的课程(所以那些还没有带来这本书的人以及那些迟于 date_to_return 带来的人)
表格课程:课程代码、课程名称。
表格pupils_on_courses:学生id、课程代码。
表格学生:学生id
表books_out_on_loan:学生id、isbn、date_borrowed、date_to_return_date_returned
我试图找到每个部分的不正确学生的数量,但现在我坚持找到最大值。
我认为错误在于我计算date_returned和date_to_return的条件
select
c.course_code, c.course_name, count (bb.pupil_id)
from
courses c
inner join
pupils_on_courses ps on c.course_code = ps.course_code
inner join
pupils p on p.pupil_id = ps.pupil_id
inner join
books_out_on_loan bb on p.pupil_id = bb.pupil_id
group by
c.course_code, c.course_name
having
count (bb.pupil_id) = (select max(count(*))
from pupil p
inner join books_out_loan bb on p.pupil_id = bb.pupil_id
where bb.date_returned is null
or bb.date_returned > date_to_return
group by c.course_code, c.course_name)
感谢您的帮助
【问题讨论】:
-
pupils和books_out_on_loan之间的 JOIN 应该是 LEFT JOIN,不是吗? -
我也尝试了左连接...仍然是相同的结果@Shiva
-
如果您在 sqlfiddle.com 上发布一些示例架构和数据,也许有人可以提供帮助...
-
子查询中不需要课程名称。
-
你也不能嵌套聚合函数。