【问题标题】:SQL query for finding the two teachers who have access to most number of course rooms用于查找可以访问最多课程房间的两位教师的 SQL 查询
【发布时间】:2019-11-20 03:21:33
【问题描述】:

我是 sql 查询的新手,所以我不知道如何创建准确的 SQL。

我尽力了,但我在网上找不到任何类似的例子,请在这里帮助我。

数据架构如下:

User(userID, username password, email, , userType)

Course(courseID, courseTitle)

Enroll(userID, courseID)

用户可以访问的课程室;请注意,用户包括教师和管理员等各种用户

Material(materialID, materialText, teacherUserID, courseID)

问题:

找到可以访问最多课程房间的两位老师。如果出现平局,请选择用户 ID 较小的。列出她/他可以为两位教师访问的用户 ID、电子邮件和课程房间的数量。**

问题是:

  1. 选择用户 ID、电子邮件、MIN(用户 ID) 我怎样才能专门找到 2 个较小的用户 ID 以及我应该选择哪个表来查找课程房间?在这种情况下我必须使用 COUNT 吗?

  2. FROM 用户加入注册 (user.usertype=enroll.userid) 由于enroll_table无法识别userID是teacher还是administrator,如果我使用JOIN,能找到我想要的结果吗?

  3. 在哪里...... 我不知道如何专门找到两位老师并确保他们有抢七局

  4. 我也必须使用 GROUP BY 和 ORDER BY 吗?

【问题讨论】:

  • 从您的表中添加一些具有预期输出的示例数据。
  • enroll 表与userscourses 具有多对一的关系(我认为它们是房间的同义词)。所以它包含你的答案。找到users 中每个人的关系count(*),其中有userType 老师。对于后者,您需要将表 enroll 与表 user 连接起来。尝试根据您的课程资料、mysql 在线帮助或互联网搜索编写此联接,我们可以为您提供更多帮助。

标签: mysql sql


【解决方案1】:

刚刚看到您尝试的查询。查找如何格式化代码,使其从文本中脱颖而出。但你的开始是对的。虽然我们没有完整的信息,但请尝试以下操作:

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(*) 子句的内容。单独阅读这一点,让自己成为一个更小的例子,这样你就可以很好地理解这一点。

【讨论】:

  • 非常感谢您的帮助和解释!我改变了一些东西,它在最后起作用了:)
【解决方案2】:

kenken068 还要求使用用户 ID 进行“tie break”,因此“order by”可能应该是

order by cnt DESC, userid ASC;

【讨论】:

  • 感谢您的帮助!但结果是一样的
【解决方案3】:

问题 1?
根据订单总数限制为 2 个。并且还作为领带刹车的用户 ID。

问题 2?
该信息应该在 User.userType
但是您需要知道教师使用的用户类型。
但是,老师有Material吗?

问题 3?
见问题 1。

问题 4?
不总是。但是要计算总数,计数通常与 group by 一起使用。

SELECT
 u.userID,
 u.email,
 COUNT(DISTINCT e.courseID) as TotalCourses
FROM `User` AS u
LEFT JOIN `Enroll` AS e
  ON u.userID = e.userID
WHERE u.userID IN (SELECT DISTINCT teacherUserID FROM `Material`)
GROUP BY u.userID, u.email
ORDER BY TotalCourses DESC, u.userID
LIMIT 2

【讨论】:

    【解决方案4】:
    Select teacheruserID, count(courseID) from material 
    group by teacheruserID;
    

    这将为您提供教师可以访问的课程数量。

    然后在 order by desc 子句的帮助下简单地对其进行降序排序。 并选择 TOP 2TOP 关键字

    【讨论】:

      猜你喜欢
      • 2013-05-27
      • 1970-01-01
      • 2023-03-31
      • 2020-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-14
      • 2022-01-08
      相关资源
      最近更新 更多