1

嗨,我很想查询联结表,但我无法弄清楚。我怎样才能找到特定课程中得分最高的五个学生

 CREATE TABLE Students (
 StudentID int NOT NULL PRIMARY KEY,
 LastName varchar(255) NOT NULL,
 FirstName varchar(255) NOT NULL,
 StudentNum int NOT NULL,
);
CREATE TABLE Courses (
 CourseID int NOT NULL PRIMARY KEY,
 CourseName varchar(255) NOT NULL,
 GPA int(255) NOT NULL
);

CREATE TABLE University (
StudentID int NOT NULL,
CourseID int NOT NULL,
CONSTRAINT PK_University PRIMARY KEY
(
StudentID,
CourseID
),
FOREIGN KEY (StudentID) REFERENCES Students (StudentID),
FOREIGN KEY (CourseID) REFERENCES Courses (CourseID)
);
4

1 回答 1

0

我将分数字段添加到University表中并将大学名称更改为Students_Courses.

首先将大学表更改为:

CREATE TABLE Students_Courses (
 StudentID int NOT NULL,
 CourseID int NOT NULL,
 Score float,
 CONSTRAINT PK_Students_Courses PRIMARY KEY
 (
 StudentID,
 CourseID
 ),
 FOREIGN KEY (StudentID) REFERENCES Students (StudentID),
 FOREIGN KEY (CourseID) REFERENCES Courses (CourseID)
);

现在您可以join对表格进行排序并按分数排序,并找到最高分数中的 5 个。

您可以使用

select top 5 s.StudentID,s.FirstName,s.LastName,sc.Score,c.CourseName
from Students_Courses sc join Students s on sc.StudentID = s.StudentID
join Courses c on sc.CourseID = c.CourseID
where sc.CourseID = 1
order by Score desc

或者

select top 5 s.StudentID,s.FirstName,s.LastName,sc.Score 
from Students_Courses sc join Students s on sc.StudentID = s.StudentID
where sc.CourseID = 1
order by Score desc

或使用窗口功能

select StudentID,FirstName,LastName,Score 
from
  (select s.StudentID,s.FirstName,s.LastName,sc.Score,ROW_NUMBER() over(order by sc.Score desc) as seq
  from Students_Courses sc join Students s on sc.StudentID = s.StudentID
  where sc.CourseID = 1) T
where seq <= 5

dbfiddle中的演示

于 2021-07-15T17:24:01.673 回答