leetcode:1280. 门生们到场各科测试的次数(sql题)

打印 上一主题 下一主题

主题 1618|帖子 1618|积分 4854

难度:简单

  门生表: Students
  1. +---------------+---------+
  2. | Column Name   | Type    |
  3. +---------------+---------+
  4. | student_id    | int     |
  5. | student_name  | varchar |
  6. +---------------+---------+
  7. 在 SQL 中,主键为 student_id(学生ID)。
  8. 该表内的每一行都记录有学校一名学生的信息。
复制代码
科目表: Subjects
  1. +--------------+---------+
  2. | Column Name  | Type    |
  3. +--------------+---------+
  4. | subject_name | varchar |
  5. +--------------+---------+
  6. 在 SQL 中,主键为 subject_name(科目名称)。
  7. 每一行记录学校的一门科目名称。
复制代码

  测验表: Examinations
  1. +--------------+---------+
  2. | Column Name  | Type    |
  3. +--------------+---------+
  4. | student_id   | int     |
  5. | subject_name | varchar |
  6. +--------------+---------+
  7. 这个表可能包含重复数据(换句话说,在 SQL 中,这个表没有主键)。
  8. 学生表里的一个学生修读科目表里的每一门科目。
  9. 这张考试表的每一行记录就表示学生表里的某个学生参加了一次科目表里某门科目的测试。
复制代码

  查询出每个门生到场每一门科目测试的次数,结果按 student_id 和 subject_name 排序。
  查询结构格式如下所示。
  
  示例 1:
  1. <strong>输入:</strong>
  2. Students table:
  3. +------------+--------------+
  4. | student_id | student_name |
  5. +------------+--------------+
  6. | 1          | Alice        |
  7. | 2          | Bob          |
  8. | 13         | John         |
  9. | 6          | Alex         |
  10. +------------+--------------+
  11. Subjects table:
  12. +--------------+
  13. | subject_name |
  14. +--------------+
  15. | Math         |
  16. | Physics      |
  17. | Programming  |
  18. +--------------+
  19. Examinations table:
  20. +------------+--------------+
  21. | student_id | subject_name |
  22. +------------+--------------+
  23. | 1          | Math         |
  24. | 1          | Physics      |
  25. | 1          | Programming  |
  26. | 2          | Programming  |
  27. | 1          | Physics      |
  28. | 1          | Math         |
  29. | 13         | Math         |
  30. | 13         | Programming  |
  31. | 13         | Physics      |
  32. | 2          | Math         |
  33. | 1          | Math         |
  34. +------------+--------------+
  35. <strong>输出:</strong>
  36. +------------+--------------+--------------+----------------+
  37. | student_id | student_name | subject_name | attended_exams |
  38. +------------+--------------+--------------+----------------+
  39. | 1          | Alice        | Math         | 3              |
  40. | 1          | Alice        | Physics      | 2              |
  41. | 1          | Alice        | Programming  | 1              |
  42. | 2          | Bob          | Math         | 1              |
  43. | 2          | Bob          | Physics      | 0              |
  44. | 2          | Bob          | Programming  | 1              |
  45. | 6          | Alex         | Math         | 0              |
  46. | 6          | Alex         | Physics      | 0              |
  47. | 6          | Alex         | Programming  | 0              |
  48. | 13         | John         | Math         | 1              |
  49. | 13         | John         | Physics      | 1              |
  50. | 13         | John         | Programming  | 1              |
  51. +------------+--------------+--------------+----------------+
  52. <strong>解释:</strong>
  53. 结果表需包含所有学生和所有科目(即便测试次数为0):
  54. Alice 参加了 3 次数学测试, 2 次物理测试,以及 1 次编程测试;
  55. Bob 参加了 1 次数学测试, 1 次编程测试,没有参加物理测试;
  56. Alex 啥测试都没参加;
  57. John  参加了数学、物理、编程测试各 1 次。
复制代码
题解:

  1. # Write your MySQL query statement below
  2. SELECT   
  3.     s.student_id,  
  4.     s.student_name,  
  5.     sub.subject_name,  
  6.     COUNT(e.subject_name) AS attended_exams  
  7. FROM   
  8.     Students s  
  9. CROSS JOIN   
  10.     Subjects sub  
  11. LEFT JOIN   
  12.     Examinations e ON s.student_id = e.student_id AND sub.subject_name = e.subject_name  
  13. GROUP BY   
  14.     s.student_id, s.student_name, sub.subject_name  
  15. ORDER BY   
  16.     s.student_id, sub.subject_name;
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

十念

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表