SQL查询 - 学生数据库

时间:2012-02-25 12:04:09

标签: mysql sql

我正在为一所大学开展一个数据库项目。架构如下:

Student       (StudentID, FName,LName, ....)  
StudentMarks  (StudentID,SubjectID, Marks)  
Subject       (SubjectID, CourseID, SubjectName)  

如何编写查询以检索学生(例如ENG1000)已获得最高分数的SubjectID。

请帮我解决这个问题。

6 个答案:

答案 0 :(得分:1)

SELECT SubjectID
FROM StudentMarks
WHERE Marks = (SELECT MAX(Marks) FROM StudentMarks);

答案 1 :(得分:1)

我不想给你完整的解决方案,因为这不是最好的学习方式:)

如果您只需要SubjectID并且已经拥有StudentID,那么您可以仅使用StudentMarks表编写语句,而无需加入其他任何一个。考虑一下您可以使用哪些聚合函数并注意:

  • 如何通过StudentID限制/分组结果
  • 从该集合中检索MAXimum分数

一旦你实现了这个目标,想一想你如何能够找到学生的名字,以及他们得分如此之好的主题的名字 - 你将不得不考虑加入到其他表格。

答案 2 :(得分:0)

试试这个:

SELECT
    StudentID , SubjectID ,Marks
    ,DENSE_RANK() OVER (PARTITION BY StudentID ORDER BY Marks DESC) AS score_rank
    INTO #temp
FROM StudentMarks

SELECT 
        StudentID, SubjectID, Marks
FROM    #temp 
WHERE   score_rank = 1

DROP TABLE #temp

答案 3 :(得分:0)

我不得不做一些假设:ENG1000是StudentID,'max'标记是100 ......

SELECT SubjectID FROM StudentMarks
WHERE StudentMarks.StudentID = ENG1000
AND StudentMarks.Marks = 100

答案 4 :(得分:0)

SELECT subjectID
FROM StudentMarks
WHERE studentID = 'ENG1000'
ORDER BY mark DESC
LIMIT 1;

答案 5 :(得分:0)

我认为这会表现不错

SELECT SubjectID
FROM StudentMarks
WHERE Marks = (SELECT MAX(Marks)
FROM StudentMarks) AND studentID = 'ENG1000' ;