数据库的 SQL 查询查找学生的 nr

标签 sql database

我是数据库的初学者,我有以下内容:我需要展示那些有最多不正确学生的类(class)(所以那些还没有带书的人和那些迟于 date_to_return 带书的人)

  1. 表格类(class):类(class)代码、类(class)名称。

  2. pupils_on_courses:pupil_id,course_code。

  3. 学生:pupil_id

  4. books_out_on_loan:pupil_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) 

非常感谢您的帮助

编辑: 一些样本数据是: enter image description here

最佳答案

select 
    c.course_code, min(c.course_name) course_name,
    count(distinct pc.pupil_id) as max_pupil_cnt
from 
    courses c inner join pupils_on_courses pc
        on ps.course_code = c.course_code
    inner join books_out_on_loan b
        on b.pupil_id = pc.pupil_id
where b.date_returned is null or b.date_returned > b.date_to_return
group by c.course_code
having count (distinct pc.pupil_id) >= all (
    select count(distinct pc2.pupil_id)
    from pupils_on_courses pc2 inner join books_out_loan b2. 
        on b2.pupil_id = pc2.pupil_id
    where b2.date_returned is null or b2.date_returned > b2.date_to_return
    group by pc2.course_code
);

有现代方法可以做到这一点,无需重复逻辑。我猜你需要坚持基本的东西,因为这看起来像是家庭作业。

关于数据库的 SQL 查询查找学生的 nr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60103169/

相关文章:

database - Elasticsearch 列的唯一过滤器不起作用(插入重复项)

sql - PostgreSQL 检查 Golang 中的空数组更改行为

ruby - 如何在 Rails 3 中保存嵌套对象?

mysql - 使用外键完成字段

MySQL 存储过程无用错误

MySQL 对查询有任何修复吗?

sql - 在 Postgresql 中一次只查询 2 列的索引 3 列的最佳选择

database - 非归档 ORACLE DB 的表空间 PIT 恢复

sql - 向 gerrund 表添加索引

sql - 子表条件返回null