微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何查询连接表

如何解决如何查询连接表

嗨,我很想查询连接表,但我无法弄清楚。 如何找到特定课程中得分最高的五个学生

 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)
);

解决方法

我将分数字段添加到 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,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,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 中的演示

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。