【发布时间】:2018-02-07 19:59:00
【问题描述】:
我正在尝试返回评估成绩第三高的学生的姓名和成绩。我目前得到了正确的答案,但我觉得有更好的方法。
数据集
CREATE TABLE Student(
Student_ID INT,
Student_Name VARCHAR(10)
)
INSERT INTO Student (Student_ID, Student_Name) VALUES (1,'Alex'),(2, 'Brett1'),(3,'Cora'),(4,'David'),(5,'Eleanor'),(6,'Brett2')
CREATE TABLE Grades(
Student_ID INT,
Assignment_ID INT,
Grade INT
)
INSERT INTO Grades (Student_ID, Assignment_ID, Grade) VALUES (1,10,90),(2,10,85),(3,10,75),(4,10,74),(1,11,80),(2,11,81),(4,11,88),(6,11,86),(2,12,84)
尝试的解决方案
SELECT top 1 s.Student_Name, g.Grade
FROM Student s
INNER JOIN Grades g on s.Student_ID=g.Student_ID
WHERE g.Grade < 88
ORDER BY Grade DESC
如果没有 (WHERE g.Grade
提前致谢~!
【问题讨论】:
-
Top 1 返回第一个而不是第三个 .. 更好地解释你需要什么
标签: sql sql-server optimization