选择每个 Class 中聚合度最高的名称
Selecting Names with Highest Aggregate in each Class
我是 SQL 的新手,我正在使用下表:
CREATE TABLE Student (
StudentID int,
Name nvarchar(30),
Class nvarchar(30)
);
INSERT INTO Student (StudentID, Name, Class)
VALUES (1,'Alfredo','X'), (2,'Jack','X'), (3,'Chris','Y'), (4,'Paul','Y');
CREATE TABLE Subject (
SubjectID int,
Name nvarchar(30),
Class nvarchar(30)
);
INSERT INTO Subject (SubjectID, Name, Class)
VALUES (1,'Maths','X'), (2, 'Science','X'), (3, 'English','Y'), (4, 'Arts','Y');
CREATE TABLE Performance (
StudentID int,
SubjectID int,
Marks int
);
INSERT INTO Performance (StudentID, SubjectID, Marks)
VALUES
(1,1,61),(1,2,75),
(2,1,82),(2,2,64),
(3,3,82),(3,4,83),
(4,3,77),(4,4,81);
我正在尝试编写查询以检索每个 class 中总分最高的学生姓名。
我的预期输出是:
StudentID Name Marks Class
2 Jack 146 X
3 Chris 165 Y
我尝试使用以下查询来合并表
SELECT * FROM Performance AS p
INNER JOIN
Student AS s
ON p.StudentId = s.StudentId
此查询用于检索聚合标记
SELECT StudentID, SUM(MARKS) FROM Performance GROUP BY StudentID
我完全不知道如何合并这两个查询来实现我的 objective。还有其他解决方法吗?
请指教
这里是你如何做到的:
select * from
(
select s.StudentID, name, class
, sum(marks) Marks,row_number() over (partition by class order by sum(marks) desc) rn
from Performance p
join Student s
on s.StudentID = p.StudentID
group by StudentID ,name,class
) t
where rn = 1
db<>fiddle here
我是 SQL 的新手,我正在使用下表:
CREATE TABLE Student (
StudentID int,
Name nvarchar(30),
Class nvarchar(30)
);
INSERT INTO Student (StudentID, Name, Class)
VALUES (1,'Alfredo','X'), (2,'Jack','X'), (3,'Chris','Y'), (4,'Paul','Y');
CREATE TABLE Subject (
SubjectID int,
Name nvarchar(30),
Class nvarchar(30)
);
INSERT INTO Subject (SubjectID, Name, Class)
VALUES (1,'Maths','X'), (2, 'Science','X'), (3, 'English','Y'), (4, 'Arts','Y');
CREATE TABLE Performance (
StudentID int,
SubjectID int,
Marks int
);
INSERT INTO Performance (StudentID, SubjectID, Marks)
VALUES
(1,1,61),(1,2,75),
(2,1,82),(2,2,64),
(3,3,82),(3,4,83),
(4,3,77),(4,4,81);
我正在尝试编写查询以检索每个 class 中总分最高的学生姓名。
我的预期输出是:
StudentID Name Marks Class
2 Jack 146 X
3 Chris 165 Y
我尝试使用以下查询来合并表
SELECT * FROM Performance AS p
INNER JOIN
Student AS s
ON p.StudentId = s.StudentId
此查询用于检索聚合标记
SELECT StudentID, SUM(MARKS) FROM Performance GROUP BY StudentID
我完全不知道如何合并这两个查询来实现我的 objective。还有其他解决方法吗?
请指教
这里是你如何做到的:
select * from
(
select s.StudentID, name, class
, sum(marks) Marks,row_number() over (partition by class order by sum(marks) desc) rn
from Performance p
join Student s
on s.StudentID = p.StudentID
group by StudentID ,name,class
) t
where rn = 1
db<>fiddle here