当前位置: 首页 > news >正文

经典SQL查询问题的练习第四天

📝 第四天 SQL 打卡题目
student(studentId, studentName)
course(courseId, courseName, teacher,prerequisite(先修课程))
score(score, studentId, courseId,year)

题目1:查询每位学生的优势学科

SELECT s.studentId,s.studentName,c.courseName,sc.score
FROM score sc
JOIN student s ON sc.studentId = s.studentId
JOIN course c ON sc.courseId = c.courseId
WHERE sc.score > (SELECT AVG(score) FROM score WHERE studentId = sc.studentId
);

该查询通过子查询计算每位学生的平均成绩,然后筛选出高于该平均分的课程记录。JOIN操作关联学生和课程信息,最终返回学生ID、姓名、课程名和成绩。

题目2:查询连续两年选修同一门课程的学生

SELECT a.studentId,s.studentName,a.courseId,c.courseName
FROM score a
JOIN score b ON a.studentId = b.studentId AND a.courseId = b.courseIdAND a.year = b.year - 1
JOIN student s ON a.studentId = s.studentId
JOIN course c ON a.courseId = c.courseId;

通过自连接查找同一学生在相邻两年选修相同课程的记录。连接条件包括学生ID、课程ID和年份差为1。

题目3:查询教师授课成绩的标准差

SELECT c.teacher,c.courseName,ROUND(STDDEV(sc.score), 2) AS score_stddev,COUNT(*) AS student_count
FROM score sc
JOIN course c ON sc.courseId = c.courseId
GROUP BY c.teacher, c.courseName
HAVING COUNT(*) > 5
ORDER BY score_stddev DESC;

使用STDDEV函数计算每位教师所授课程成绩的标准差,反映评分稳定性。HAVING子句过滤学生数量少于5的课程,确保统计有效性。

题目4:使用CTE递归查询选课路径依赖

WITH RECURSIVE course_path AS (SELECT courseId, courseName, 1 AS level FROM course WHERE prerequisite IS NULLUNION ALLSELECT c.courseId, c.courseName, cp.level + 1FROM course cJOIN course_path cp ON c.prerequisite = cp.courseId
)
SELECT * FROM course_path ORDER BY level;

递归CTE从无先修课的课程开始,逐层查找依赖关系。level字段表示课程在依赖树中的深度。

题目5:使用CASE WHEN实现成绩分段统计

SELECT c.courseName,COUNT(*) AS total,SUM(CASE WHEN sc.score >= 90 THEN 1 ELSE 0 END) AS 'A',SUM(CASE WHEN sc.score >= 80 AND sc.score < 90 THEN 1 ELSE 0 END) AS 'B',SUM(CASE WHEN sc.score < 60 THEN 1 ELSE 0 END) AS '不及格'
FROM score sc
JOIN course c ON sc.courseId = c.courseId
GROUP BY c.courseName;

通过CASE WHEN条件表达式统计各分数段人数,实现成绩分布透视。每个CASE返回1或0,SUM聚合计算满足条件的人数。

题目6:优化包含LIKE和ORDER BY的混合查询

-- 方案1:创建覆盖索引
ALTER TABLE student ADD INDEX idx_name_id (studentName, studentId);-- 方案2:对大数据量使用延迟关联
SELECT s.* FROM student s
JOIN (SELECT studentId FROM student WHERE studentName LIKE '张%'ORDER BY studentId DESCLIMIT 100
) tmp ON s.studentId = tmp.studentId;

复合索引idx_name_id满足最左前缀原则和排序需求。延迟关联先在内层查询中利用索引快速定位ID,再通过JOIN获取完整数据,减少回表操作。

实际应用场景总结

优势学科分析可用于学生能力画像,连续选课查询反映学习行为持续性,标准差评估教学质量稳定性,递归CTE分析课程体系依赖,成绩分段统计支持可视化报表,索引优化提升模糊搜索性能。

💡 每日考点总结

题号核心考点实际应用场景
1子查询比较学生能力画像分析
2自连接时间序列学习行为连续性分析
3统计函数应用教学质量稳定性评估
4CTE递归查询课程体系依赖关系分析
5条件聚合成绩分布可视化准备
6索引覆盖+延迟关联模糊搜索性能优化

相关文章:

  • AutoCompose - 携程自动编排【开源】
  • 【亲测有效】Mybatis-Plus中更新字段为null
  • pytorch3d+pytorch1.10+MinkowskiEngine安装
  • PyTorch--池化层(4)
  • Attention Is All You Need (Transformer) 以及Transformer pytorch实现
  • pytorch基本运算-导数和f-string
  • 互联网大厂Java求职面试:AI大模型与云原生技术的深度融合
  • MySQL关系型数据库学习
  • 第三发 DSP 点击控制系统
  • 【MATLAB代码】制导方法介绍与例程——三点法|三维空间,动态目标导引(订阅专栏后可直接查看源代码)
  • leetcode hot100 链表(一)
  • matlab实现求解兰伯特问题
  • Axure形状类组件图标库(共8套)
  • xTimerChangePeriod无需先Stop
  • 我的世界模组开发——方块实体(1)
  • 部署过程中--常用Linux命令
  • centos中的ulimit命令
  • AD转嘉立创EDA
  • 手动删除网页上的禁止复制事件
  • C# Onnx 动漫人物头部检测
  • 成品免费观看网站/哈尔滨seo优化
  • 旬阳做网站/百度搜索软件
  • 贵阳网站建设电话/输入关键词搜索
  • 揭阳市榕城区建设局网站/seo优化实训总结
  • 福泉网站制作/湖州网站建设制作
  • 政府网站建设作用/品牌推广和营销推广