news 2026/5/30 18:05:45

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/5/24 14:19:24

2026年,Agent与APP必有一战

旧钥匙打不开新大门,旧地图找不到新大陆。 刚过去的2025年,AI炙手可热,人工智能第一次走进人类日常生活——前所未有地通过手机AI甚至AI手机。 但颠覆与创新,也总是伴随“争议”。 从近年手机厂运用AI算法辅助,让更多人…

作者头像 李华
网站建设 2026/5/29 2:18:28

基于PLC的立体车库管理系统设计

基于PLC的立体车库管理系统设计与实现 第一章 绪论 随着城市汽车保有量激增,停车难已成为城市交通治理的核心痛点,立体车库凭借空间利用率高(较传统平面车库提升3-5倍)的优势成为主流解决方案,但传统立体车库多仅具备…

作者头像 李华
网站建设 2026/5/29 23:58:52

DDD 架构演进,单层、三层,四层,工程分层演进过程!

定义接口、创建方法、调用展示,其实编程写代码说到底也就这3步,人人都是程序员👨🏻‍💻。公司老板都觉得,它有个AI工具,它都能写代码。 但现在的系统工程的分层结构,可不只是一层就写个 Controller,甚至是3层(Model-View-Controller),也有可能是4层(DDD)架构。…

作者头像 李华
网站建设 2026/5/20 21:55:25

Python 的 with 语句:把「资源管理」这件事交给语法

文章目录一、with 语句是干什么的?二、不用 with 会发生什么?三、传统解法:try / finally四、with 的本质:语法级 try / finally五、上下文管理器(Context Manager)5.1 一个最简单的例子5.2 __enter__ 和 _…

作者头像 李华