使用RDS的数据库
登录数据库
RDS数据库的登录
登录成功的界面
需要专门创建账户信息,否则的话是没有办法登录的。
进入之后,会有很多的学习指导
在进行数据集导入数据库的时候,可能会遇到以下的问题:
使用导入数据的方式处理所有的表创建以及表数据的导入处理
试题一的解答思路
题目:现在我们关注的是没门考试有哪些顶尖学生,一门考试的顶尖学生是指一个学生的分数在参加该考试的不同学生中得分排名前三。
编写一个sql查询,找出每个考试中得分最高的考生。
若同一个考生有多条考试记录,则取最高分。
如果存在并列,将并列的考生都列举出来,直到列举的考生达到或超过三人。
以没门考试考试分数从高到低的排序,返回结果集:
解题思路:
第一步:先筛选出来分数的前三个数据:
select * fROM `testattempt` order by score desc limit 3select * fROM `testattempt` order by score desc limit 3
第二步:关联查询出来按照分数来查询前三的学生:
select `test`.`name` ,s.`name` ,tt.`score` fROM `testattempt` tt
left join `student` s on tt.`studentId` = s.`id`
LEFT JOIN `test` on `test`.`id` =tt.`testId`
order by score desc limit 3
第三步:按照每场考试,获取出来关于每场考试中,得分最高的学生:
select tt1.`testId` ,tt1.`studentId` ,tt1.`score` fROM `testattempt` tt1
left join (select DISTINCT `score` ,`studentId`, `testId` from `testattempt`) tt2
on tt1.`testId` = tt2.`testId`
and tt1.`score` <tt2.`score`
and tt1.`studentId` =tt2.`studentId`
group by tt1.`score` ,tt1.`testId`,tt1.`studentId`
HAVING count(1)<3
order by testId ,score desc
第四步:需要考虑出来,关于同一个 学生只考试一次的处理;
SELECT t.id, s.studentId, s.score
FROM (
SELECT
testId,
MAX(score) AS max_score
FROM testattempt
GROUP BY testId
) ts
INNER JOIN testattempt s ON ts.testId = s.testId AND ts.max_score = s.score
INNER JOIN Test t ON s.testId = t.id
WHERE (
SELECT COUNT(DISTINCT score)
FROM testattempt s2
WHERE s.testId = s2.testId AND s2.score >= s.score
) < 3
ORDER BY t.id,s.score DESC;
第五步:可以执行的sql语句:
SELECT t.name as Test, st.name as Student, s.score
FROM (
SELECT
testId,
MAX(score) AS max_score
FROM testattempt
GROUP BY testId
) ts
INNER JOIN testattempt s ON ts.testId = s.testId AND ts.max_score = s.score
INNER JOIN Test t ON s.testId = t.id
INNER JOIN student st on st.id=s.studentId
WHERE (
SELECT COUNT(DISTINCT score)
FROM testattempt s2
WHERE s.testId = s2.testId AND s2.score >= s.score
) < 3
ORDER BY t.id,s.score DESC;
最后:
这道题目最大的难点是每个人都有参与多次考试的处理,每次只能获取到该门成绩最大的那个值作为成绩,并且需要取前三名,如果成绩是100、98、96、96、96;意思是这四个人都是前三名,只不过第三个成绩96、与第四个成绩96的成绩是一样的。并列第三名。