我有三张表:
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经验的人来说,这不是一件复杂的事情。非常感谢。
发布于 2014-08-10 20:52:42
您的第一个显示最优秀学生的查询:
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发布于 2014-08-11 16:14:07
在这里引用小提琴:
链接1:http://sqlfiddle.com/#!4/ab4de6/19
链接2:http://sqlfiddle.com/#!4/ab4de6/32
下面的查询应该对您在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;您需要了解以下概念。
https://stackoverflow.com/questions/25228130
复制相似问题