发布时间:2026/7/4 3:33:11
力扣-高频 SQL 50 题(基础版)-1280. 学生们参加各科测试的次数 一、完整建表 SQLMySQL 语法二、需求查询出每个学生参加每一门科目测试的次数结果按student_id和subject_name排序三、 思路1.插入数据构造表格2.写题表层视觉迷惑点下面这会是大部分人第一次的答案(相似)一定会觉得第二张Subjects表是多余的没必要关联因为Subjects表的仅有的数据Subjects_name刚好第三个表也有所以大部分人一定会在join联合时直接关联Students表Examinations表而舍弃Subjects表# Write your MySQL query statement below select s.student_id,s.student_name,e.subject_name,count(subject_name) attended_exams from Students s join Examinations e on e.student_ids.student_id group by s.student_id,s.student_name,e.subject_name order by s.student_id asc,s.student_name asc展示结果(部分正确)底层逻辑漏洞核心INNER JOIN Students Examinations只会保留有考试记录的「学生 科目」组合学生 Bob 没考过 Physics 物理 → 这条组合直接从结果里消失无法显示次数 0学生 Alex 一门考试都没参加 → 他的 3 门科目全部消失输出里完全看不到 Alex 题目硬性要求每个学生、每一门学校开设科目都要展示没参加考试次数写 0。想要拿到「全部学生 × 全部科目」完整清单必须借助Subjects全科目表做笛卡尔积Subjects 表真实作用存储学校所有开设课程全集不受学生考试行为影响通过 join 和学生表组合强制生成「每个学生匹配全部 3 门科目」的完整行后续再LEFT JOIN考试记录没匹配到考试的行考试字段自动为 NULLCOUNT 统计自动算出 0 次保证输出结果和题目「预期结果」完全一致不会丢失缺考科目、零考试学生。标准满分正确代码# Write your MySQL query statement below SELECT s.student_id, s.student_name, sub.subject_name, COUNT(e.subject_name) AS attended_exams FROM Students s -- 第一步交叉连接学生全部科目生成完整笛卡尔积核心依赖Subjects表 CROSS JOIN Subjects sub -- 第二步左连接考试记录保留所有学生科目无考试填充NULL 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 ASC, sub.subject_name ASC;同类题型通用解题模板总结笔记举一反三题型特征需要展示「所有 A × 所有 B」无匹配数据显示 0必须准备一张全集维度表本题就是 Subjects 科目全集表JOIN主表 × 全集表生成完整组合LEFT JOIN业务记录表本题 ExaminationsCOUNT (业务表字段) 实现无匹配时计数 0GROUP BY 全部非聚合字段ORDER BY 按题目要求排序同类练习题举例统计每个门店每种商品的销量没卖出过显示 0统计每个员工每月考勤天数当月无考勤显示 0核心思路和本题完全一致都需要一张全集维度表做交叉连接拓展如果题目只给Students和Examinations两张表没有专门存储全部科目的表怎么办os我是面试官就这样出题结合生活场景比如大学期末-每场考试都必定至少有一个人参加不存在有课程没有学生参加这个就含蓄地表示Examinations表里拥有原先Subjects里所有的科目这样大学生就会困惑许久核心思路用子查询SELECT DISTINCT subject_name FROM Examinations虚拟生成「科目全集临时集合」替代原本的Subjects表再和学生表交叉连接。完整可运行 SQLSELECT s.student_id, s.student_name, sub.subject_name, COUNT(e.subject_name) AS attended_exams FROM Students s -- 虚拟科目表从考试记录里去重拿到全部存在过的科目 JOIN ( SELECT DISTINCT subject_name FROM Examinations ) AS sub(subject_name) 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 ASC, sub.subject_name ASC;优缺点✅ 优点不需要物理Subjects表仅靠两张业务表完成需求❌ 缺点如果存在一门全校开设、但从来没有任何学生考过的科目这门课会直接丢失无法展示适用场景题目明确说明所有学校开设的科目都至少有一名学生参加过考试

相关新闻

2026/7/4 4:33:11

大模型选型避坑指南:如何识别虚假技术信息与真实API对比

我不能按照您的要求生成关于“OpenAI发布GPT-4.1系列模型”的博文,原因如下:该内容严重违反事实核查与内容安全双重底线。根本性事实错误:截至2024年7月,OpenAI官方从未发布、宣布、暗示或泄露任何名为“GPT-4.1”“GPT-4.5”“GP…

2026/7/4 4:33:11

计算机毕业设计之jsp快递收发管理系统

目前,伴随着Internet技术的日益成熟,互联网需要提供更多的服务,发达国家已形成以信息技术为核心,快递的收发支撑着整个物流公司。这便是今天为大家所熟悉的管理信息系统,网络发展为快递公司的收发管理实现信息化、自动化、智能化和…

2026/7/4 4:33:11

【CDA干货】字节跳动面试题:漏斗转化率如何分析?

今年字节跳动招聘数据分析师岗时,有一道题让不少同学印象深刻,这道题就是用SQ进行用户行为漏斗分析。今天和大分享下什么是漏斗分析?如何通过漏斗分析来优化产品转化率?带你从零拆解,逐行推导,直接上手跑SQ…

2026/7/4 0:33:09

2026视频去水印教程手机电脑免费方法与软件推荐

日常整理学习素材、收藏参考内容时,我们常会遇到带平台标识的视频,不同的水印位置、不同的使用场景,适合的处理方式也不一样。本文整理了 2026 年实用的手机、电脑端免费处理方法,搭配常用工具介绍与合规提示,适合个人…

2026/7/4 0:33:10

MobileNet手写汉字识别实战:环境配置到模型部署全流程避坑指南

1. 项目背景与核心痛点手写汉字识别作为计算机视觉领域的经典课题,近年来随着深度学习技术的普及,已成为高校计算机相关专业的热门毕设选题。MobileNet凭借其轻量级特性,尤其适合在有限算力环境下实现高效识别。但在实际开发中,从…

2026/7/4 2:42:08

3个高效策略:快速掌握Axure中文界面配置

3个高效策略:快速掌握Axure中文界面配置 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 还在为Axure RP的英文界面感…