首页 > 解决方案 > 选择每个类别中聚合度最高的名称

问题描述

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

我正在尝试编写一个查询来检索每个班级中总分最高的学生姓名。

我的预期输出是:

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

我对如何合并这两个查询以实现我的目标一无所知。还有其他解决方法吗?

请指教

标签: mysqlsqlgroupwise-maximum

解决方案


这是你如何做到的:

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<>在这里摆弄


推荐阅读