Sql 编写两个查询(根据平均成绩对学生和城市进行排序)

Sql 编写两个查询(根据平均成绩对学生和城市进行排序),sql,Sql,我有三张桌子: 1) Students: studentID (KEY), name, surname, address 2) Exams: examID (KEY), examName 3) Grades: studenID (KEY), examID(KEY), grade 如何编写SQL查询来显示最好的学生,例如平均成绩在9分以上的学生 如何编写SQL查询,根据学生的平均成绩对城市列地址进行排名 我是一名系统工程师,在Unix和Linux系统中工作,我是SQL新手,我只知道SQL的基础知

我有三张桌子:

1) Students: studentID (KEY), name, surname, address
2) Exams: examID (KEY), examName
3) Grades: studenID (KEY), examID(KEY), grade
如何编写SQL查询来显示最好的学生,例如平均成绩在9分以上的学生

如何编写SQL查询,根据学生的平均成绩对城市列地址进行排名


我是一名系统工程师,在Unix和Linux系统中工作,我是SQL新手,我只知道SQL的基础知识,在过去的三天里我一直在尝试这样做,但没有成功,所以请帮助我。我想对于一个有SQL经验的人来说,这不是一件复杂的事情。非常感谢。

您的第一个查询显示了最好的学生:

  SELECT student.surname, students.surename, students.address
  FROM 
  students INNER JOIN Grades ON Grades.StudentID=Students.StudentID 
  INNER JOIN Exams ON Grades.examID=exams.examID WHERE Grades.grade=
  (SELECT MAX(grade) FROM Grades WHERE examID=exams.examID) 
您的第二个城市排名查询:

  SELECT students.address
  FROM 
  students INNER JOIN Grades ON Grades.StudentID=Students.StudentID 
  INNER JOIN Exams ON Grades.examID=exams.examID order by grades.grade DESC
请参阅此处的小提琴:

链接1:

链接2:

在Oracle中,以下查询应该对您有所帮助:

--List of Students having Average grade >=9

SELECT S.studentID, S.NAME, S.SURNAME, S.ADDRESS, A.AVG_GRADE FROM 
STUDENTS S JOIN
( 
   SELECT studentID, AVG(GRADE) AVG_GRADE FROM GRADES
   GROUP BY studentID

)  A
ON S.studentID = A.studentID
AND A.AVG_GRADE >=9

ORDER BY A.AVG_GRADE, S.studentID;


--------------------------------------------------------------------

--- Rank cities
SELECT A.ADDRESS, A.AVG_GRADE, ROWNUM RANKING FROM
(
    SELECT S.ADDRESS, AVG(G.GRADE) AVG_GRADE FROM
    STUDENTS  S JOIN GRADES  G
    ON S.STUDENTID = G.STUDENTID
    GROUP BY S.ADDRESS
    ORDER BY 2 DESC
  ) A;
您需要了解以下概念

平均计算
我们能看看过去三天的一些代码吗?也许我们都会从你的尝试失败的原因中学到一些东西。我的尝试失败是因为我不知道如何编写合适的查询。我写了一些非常基础的东西,列出了一些数据,但我不知道如何组合这三个表格并计算每个学生的平均分数。与其胡乱摸索,不如先花点时间学习基础知识。我听说过这本书的优点,在10分钟内自学SQL。