Mysql,三表查询求解答面试遇到的

SQL好久没写了,一下竟然不会写,给整不会了

我尝试过的方法 想知道正确答案

SELECT * from student_score
LEFT JOIN course on course.id=student_score.course_id
LEFT JOIN student ON student_score.studentid=student.id
GROUP BY student_score.course_id
ORDER BY student_score.score DESC
limit(0,3)

img

学生表 student( id name)
课程表 course (id course_name)
student_score (id student_id score course_id)
                     查总分排名前三大学生的名字
  1. 有group by 的一个select里,不管是否可以执行查询,记住不要用select * from
  2. 你这个需求是查总分,不用管是什么课程,在确认分数表里的课程字段里的值都存在于课程表中时,可以不用关联课程表
  3. 既然查询结果是名字这一个字段,那么如果严格按照要求,是不能查询出其他字段的,所以上面几位的回答都存在问题
  4. 总分排名前三,但不一定就是三个名字,因为可能存在同分并列的情况,用limit进行行数限制的话,可能会导致数据缺失
  5. 综上,建议使用rank函数来进行排名,再套一层查询rank<=3 的名字

SELECT s.id,s.name,SUM(ss.score) totalScore
FROM
student s
LEFT JOIN
student_score ss
ON s.id = ss.student_id
GROUP BY ss.student_id
ORDER BY totalScore DESC
LIMIT 0,3

SELECT * FROM student_socre AS score
LEFT JOIN student AS s on s.id = score.student_id
LEFT JOIN course AS c on c.id = course_id
GROUP BY s.id,s.name
ORDER BY SUM(score.score) DESC
LIMIT 0,3