mysql - 选择每个类别中聚合度最高的名称

标签 mysql sql groupwise-maximum

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

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

请多多指教

最佳答案

具体操作方法如下:

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

关于mysql - 选择每个类别中聚合度最高的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66958615/

相关文章:

PHP MySql (1045) 用户访问被拒绝

php - SQL根据另一个列值得到不同的列结果

PHP SQL 字符串赋值抛出服务器错误

mysql - SQL - 从大数据集中返回最新的多条记录

mysql - 较大查询中的分组最大值

mysql - 检索每组中的最后一条记录 - MySQL

php - PDO::query() 期望参数 1 为字符串,对象给出警告

sql - SQL Server 2005 中带有 "FOR XML PATH"的 XML 声明

php - 匹配 PHP 数组中的数据并显示不匹配的内容

sql - 授予者没有 GRANT 权限 - 问题