跟他学sql(第六天)

前言

今天百闻牌更新了新卡包,我开了100多包开出10张ssr,看来是我人生巅峰了。
所以,今天我们还是来做sql。

第十九问

题目:查询学生的总成绩并进行排名
分析:来了来了来了,复习一下昨天学过的知识点。排名可以使用不连续的RANK(),连续的DENSE_RANK()和8.0增加的ROW_NUMBER()。这里我假设题目需要的是ROW_NUMBER()

  • 学号s_id
  • 总成绩SUM(s_score)
  • 排名ROW_NUMBER
SELECT s_id '学号',SUM(s_score) '总分',ROW_NUMBER() OVER (ORDER BY SUM(s_score) DESC) 排名 
FROM score
GROUP BY s_id

在这里插入图片描述

第二十问

题目:查询不同老师所教不同课程平均分从高到低显示
分析:连表查询,主要是为了显示课程的平均分,我们不妨以course表作为主表。

  • 教师号t_id
  • 课程号c_id
  • 平均分AVG(s_score)
SELECT course.t_id '教师号',course.c_id '课程号',AVG(score.s_score) '平均分'
FROM course
JOIN score
ON course.c_id = score.c_id
GROUP BY course.t_id,course.c_id
ORDER BY AVG(score.s_score) DESC

在这里插入图片描述

第二十一问

题目:查询所有课程的成绩第2到3名的学生的姓名和该课程成绩。
分析:题目说的不是很明白,其实就是按课程分组,然后组内排序,最后查询第二名和第三名。分组排序其实我们昨天刚学过,需要使用PARTITION BY

  • 课程号c_id
  • 成绩s_score
  • 姓名s_name
  • 成绩2到3名ROW_NUMBER IN (2,3)
SELECT a.c_id '课程号',Student.s_name '姓名',a.s_score '分数',a.no '排名'
FROM
(SELECT s_id,s_score,c_id,ROW_NUMBER() OVER(PARTITION BY c_id ORDER BY s_score DESC) 'no'
FROM score) a
JOIN Student
ON a.s_id = Student.s_id
WHERE a.no in (2,3)

在这里插入图片描述


在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_33241802/article/details/106951085