SQL Server 如何正确实现Aggregate函数?

zzwlnbp8  于 2023-01-29  发布在  其他
关注(0)|答案(1)|浏览(129)

在我的项目中有两个表。学生表和课程表。它们通过外键连接(学生表中的Id和课程表中的StudentId)。我想返回每节课的最高分数和学生的名字。我知道我应该实现聚合函数。它可以很好地返回所有课程的最高分数,但是我不知道如何返回特定课程的最高分数(例如数学)。

select s.Name, l.Grade
from Students s
inner join Lessons l on s.Id = l.StudentId
where l.Grade = (select MAX(Grade) from Lessons)

public class StudentClass
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public List<Lesson> Lessons { get; set; }
    }

public class Lesson
        public int Id { get; set; }
        public string Name { get; set; }
        public int Grade { get; set; }
        public int StudentId { get; set; }
        [ForeignKey("StudentId")]
        public StudentClass Student { get; set; }
    }
rhfm7lfc

rhfm7lfc1#

更现代的解决方案是使用ROW_NUMBER:

select *
from (
  select s.Name, l.Grade, l.Name
  , ROW_NUMBER() OVER(PARTITION BY l.Name ORDER BY Grade DESC) AS sort
  from Students s
  inner join Lessons l on s.Id = l.StudentId
  ) les
WHERE les.sort = 1

这将为每个较小的名称创建一个计数器(按级别降序排序),然后检索第一个结果

相关问题