因此,我有一个MySQL数据库,该数据库用于我制作的软件,教师可以在其中上传作业,学生可以进行作业,教师可以评估这些作业。现在,我要列出一个概述,该任务对交货的评论最多,降序排列。

所有分配都存储在名为module的表中,其中module_id为PK。所有交付都存储在称为交付的表中,其中delivery_id为PK,user_id和module_id均为FK。最后但并非最不重要的一点是,我们有student_comment表,其中存储了所有注释。在该表中,Student_comment_id为PK,delivery_id为FK。如果我的解释太可怕了,我会在表格制作方式中列出。显然还有更多表,但我认为它们与这个问题无关。

create table module(
module_id int not null auto_increment,
module_name varchar(50) not null,
description varchar(1000),
rights int,
primary key(module_id)
);

create table delivery(
delivery_id int not null auto_increment,
module_id int,
users_id int,
delivery_status int,
date_delivered date,
date_approved date,
primary key(delivery_id),
foreign key(module_id) references module(module_id),
foreign key(users_id) references users(users_id)
);

create table student_comment(
student_comment_id int not null auto_increment primary key,
s_content varchar(100),
delivery_id int,
foreign key(delivery_id) references delivery(delivery_id));


同样,我想列出一个概述,其中哪个模块对交付的意见最多,我想按降序对其进行排序。我已经尝试了一段时间,但无法真正弄清楚该如何做。任何帮助都非常感谢!

另外,我刚刚开始使用SQL,因此,如果您认为有什么问题是错误的,或者您拥有大量可以帮助我的信息,请随时发表评论。

最佳答案

汇总查询应产生您的要求。当您说“哪个模块对交付的意见最多”时,我认为这意味着您想知道所有交付的意见数量。以下SQL应该会为您提供。

select
    m.module_id,
    count(c.student_comment_id) as comment_count
from
    module as m
    inner join delivery as d on d.module_id=m.module_id
    inner join student_comment as c on c.delivery_id=d.delivery_id
group by
    m.module_id
order by
    count(c.student_comment_id) desc;

08-28 22:55