我是一个处理SQL查询的新手,所以我不知道如何创建一个精确的sql。
我尽了最大的努力,但我在网上找不到类似的例子,请在这里帮助我。
数据模式如下:
User(userID, username password, email, , userType)
Course(courseID, courseTitle)
Enroll(userID, courseID)用户可以访问的课程教室;请注意,用户包括各种用户,如教师和管理员。
Material(materialID, materialText, teacherUserID, courseID)问题:
找到两位能进入最多教室的老师。如果有一个平分,选择那些具有较小的用户ID。列出两位教师可以使用的用户ID、电子邮件和课程教室数。**
问题是:
,
发布于 2019-11-20 04:33:05
刚刚看到了你的查询企图。查找如何格式化代码,因此它从文本中脱颖而出。但你开始的时候是对的。虽然我们没有完整的信息,但请尝试以下方法:




select user.userid,user.username, count(*) as cnt
from enroll
join user on user.userid=enroll.userid
where user.usertype="teacher"
group by user.userid
order by cnt DESC;

所以玛丽教了三门课,走在前面。因为你只想要前两名,所以你可以添加行LIMIT 2来得到两位最多产的老师。
对于初学者来说最难理解的部分是group by子句,它生成聚合,并需要类似于第一行中的count(*)子句。分别读一读这篇文章,让自己成为一个更小的例子,这样你就能很好地理解这一点。
发布于 2019-11-20 04:51:29
kenken068还要求使用userid进行“领带中断”,所以"order“应该是
order by cnt DESC, userid ASC;发布于 2019-11-20 05:06:22
Select teacheruserID, count(courseID) from material
group by teacheruserID;这将给你的课程数量,教师可以访问。
然后,只需借助order子句将其降序。和选择带有TOP 2关键字的TOP
https://stackoverflow.com/questions/58946132
复制相似问题