当前位置:网站首页>MySQL面试真题(二十五)——常见的分组比较场景

MySQL面试真题(二十五)——常见的分组比较场景

2022-06-23 03:58:00 Socialphobia_FOGO

现在有三个表,“学生表”,“课程表”,“成绩表”。
“学生表”记录了学生的基本信息,有“学号”、“姓名”、“出生日期”、“性别”。
在这里插入图片描述
“成绩表”记录了学生选修课程的成绩,包括“学号”,选修的“课程号”以及对应课程的“成绩”。
在这里插入图片描述
“课程表”记录了学生选修的课程信息,包括课程号、课程名称及其对应的“教师号”
在这里插入图片描述
现在要查找出每门课程中成绩最好的学生的姓名和该学生的课程及成绩。
需要注意:可能出现并列第一的情况。

#解法一:
SELECT 姓名,课程名称,成绩
FROM
(SELECT *,
dense_rank()over(PARTITION BY 课程号 ORDER BY 成绩 DESC) AS 排名
FROM 成绩表
JOIN 课程表
USING(课程号)
JOIN 学生表
USING(学号))a
WHERE 排名=1
ORDER BY 课程名称
#解法二:
SELECT 姓名,课程名称,成绩
FROM 成绩表
JOIN 课程表
USING(课程号)
JOIN 学生表
USING(学号)
WHERE (课程号,成绩) IN (SELECT 课程号,MAX(成绩) FROM 成绩表 GROUP BY 课程号)
ORDER BY 课程名称

结果如下:
在这里插入图片描述

原网站

版权声明
本文为[Socialphobia_FOGO]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_46043195/article/details/125409303