我正在为一所大学开展一个数据库项目。架构如下:
Student (StudentID, FName,LName, ....)
StudentMarks (StudentID,SubjectID, Marks)
Subject (SubjectID, CourseID, SubjectName)
如何编写查询以检索学生(例如ENG1000)已获得最高分数的SubjectID。
请帮我解决这个问题。
答案 0 :(得分:1)
SELECT SubjectID
FROM StudentMarks
WHERE Marks = (SELECT MAX(Marks) FROM StudentMarks);
答案 1 :(得分:1)
我不想给你完整的解决方案,因为这不是最好的学习方式:)
如果您只需要SubjectID并且已经拥有StudentID,那么您可以仅使用StudentMarks表编写语句,而无需加入其他任何一个。考虑一下您可以使用哪些聚合函数并注意:
一旦你实现了这个目标,想一想你如何能够找到学生的名字,以及他们得分如此之好的主题的名字 - 你将不得不考虑加入到其他表格。
答案 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' ;