news 2026/3/3 4:09:15

1280. 学生们参加各科测试的次数 - 力扣(LeetCode)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
1280. 学生们参加各科测试的次数 - 力扣(LeetCode)

代码

SELECT s.student_id, s.student_name, sub.subject_name, COUNT(e.subject_name) AS attended_exams FROM Students s CROSS JOIN Subjects sub LEFT JOIN Examinations e ON s.student_id = e.student_id AND sub.subject_name = e.subject_name GROUP BY s.student_id, s.student_name, sub.subject_name ORDER BY s.student_id, sub.subject_name;

🔧 分步解释:

1.CROSS JOIN Students 和 Subjects
  • 这一步就是“配对所有学生和所有科目”。
  • 比如 Alice + Math、Alice + Physics、Bob + Math……一个不漏。
  • ✅ 这样就保证了“即使没考试,也要列出”。
2.LEFT JOIN Examinations
  • 把考试记录“贴”到上面的配对上。
  • 如果某学生某科有考试记录,就加上;如果没有,那一行的考试信息就是NULL
  • LEFT JOIN是为了保留左边的所有配对(不会丢掉没考试的组合)。
3.COUNT(e.subject_name)
  • 统计每个学生-科目组合实际考了多少次
  • 为什么不是COUNT(*)
    因为COUNT(*)会把“没考试”的行也数成 1(它数的是“行数”)。
    COUNT(e.subject_name)只数非空值——没考试时e.subject_nameNULL,就不计入,结果就是 0。✅
4.GROUP BY
  • 因为我们用了COUNT()(聚合函数),所以必须按学生+科目分组。
  • 否则数据库不知道“到底要统计谁的考试次数”。
5.ORDER BY
  • 题目要求按student_idsubject_name排序,所以加上这句让结果整齐。

结果

解题步骤:

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/9 9:24:07

CAXA开放后置处理,适配所有机床不费劲儿

我们车间简直就是机床开会,法兰克、西门子、海德汉,市面上常见的系统基本都齐了,说多了都是泪。以前换个新编程软件,后置处理真的太难了,要是软件不开放,想适配我们这一堆不同系统的机床,能熬好…

作者头像 李华
网站建设 2026/2/27 22:17:45

计算机毕业设计springboot动物保护协会系统 基于Spring Boot的流浪动物救助与领养平台 SpringBoot+MySQL的公益宠物守护系统

计算机毕业设计springboot动物保护协会系统fn275 (配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。 流浪动物数量逐年攀升,传统线下登记、电话回访、纸质档案的管理方式…

作者头像 李华
网站建设 2026/3/2 8:27:31

InVivoMAb Anti-Mouse CD4:与同类型产品相比,成本效益显著

在现代生命科学研究中,抗体药物已成为探索免疫机制、开发新药和治疗疾病的重要工具。其中,InVivoMAb anti-mouse CD4 作为一款高纯度、高活性的单克隆抗体,广泛应用于小鼠模型中的免疫细胞功能研究,是众多科研人员不可或缺的实验工…

作者头像 李华