You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写SQL按班级导出学生出勤报告及查询同时上两门课的学生

同时选修两门课的学生查询SQL修改方案

方案1:分组聚合+HAVING筛选(推荐,性能更优)

SELECT s.id, s.name
FROM attendance a
INNER JOIN students s ON a.student_id = s.id
WHERE a.class_id IN (1,2)
GROUP BY s.id, s.name
HAVING COUNT(DISTINCT a.class_id) = 2;

逻辑说明:

  • 先用WHERE过滤出所有数学、科学课的出勤记录,缩小数据处理范围
  • 按学生ID、姓名分组,保证每个学生仅对应一条统计结果
  • HAVING子句统计每个学生关联的不同课程ID数量,等于2就说明同时有两门课的出勤记录,符合筛选要求
  • 此处DISTINCT用于兼容同一名学生同一门课有多条出勤记录的场景,如果业务规则保证每个学生每门课仅有1条出勤记录,可以去掉DISTINCT直接使用COUNT(a.class_id) = 2

方案2:双关联匹配实现

SELECT DISTINCT s.id, s.name
FROM students s
INNER JOIN attendance a1 ON s.id = a1.student_id AND a1.class_id = 1
INNER JOIN attendance a2 ON s.id = a2.student_id AND a2.class_id = 2;

逻辑说明:

  • 第一次关联出勤表匹配学生的数学课出勤记录
  • 第二次关联出勤表匹配学生的科学课出勤记录
  • 只有同时满足两次关联条件的学生才会被保留,天然就是同时参加两门课的学生
  • DISTINCT用于避免同一名学生同一门课有多条记录时出现重复结果

内容的提问来源于stack exchange,提问作者Omar Ehab

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 18:36:05