如何分组并在 sql 中排名,然后 select 来自 table 的其他列,特定组的所有行应该在一起

How to group by and rank in sql , then select other columns from table all rows for a particular group should be together

我想根据 id 列对行进行分组,并按另一列的总和进行排序。然后我需要这些行和来自 table 的所有列作为有序组。

这是我正在尝试做的一个例子:

SELECT Studentname, 
       Subject, 
       Marks, 
       RANK() OVER(PARTITION BY Studentname ORDER BY Marks DESC) Rank
FROM ExamResult order by Studentname

结果:

Studentname Subject  Marks  Rank
Isabella    english  90     1
Isabella    Science  70     2
Isabella    Maths    50     3
Lily        Science  80     1
Lily        english  75     2
Lily        Maths    65     3
Olivia      english  95     1
Olivia      Science  60     2
Olivia      Maths    60     3

我需要的是按总和(分数)排序,然后将该学生的所有记录分组为一个实体。在这里,伊莎贝拉、莉莉和奥利维亚的总分是 210、220 和 215。 所以团体的顺序应该是 Lily、Olivia 和 Isabella。

要求的结果:

Studentname Subject  Marks  Rank
Lily        Science  80     1
Lily        english  75     1
Lily        Maths    65     1
Olivia      english  95     2
Olivia      Science  60     2
Olivia      Maths    60     2
Isabella    english  90     3
Isabella    Science  70     3
Isabella    Maths    50     3

您可以使用两个级别的 window 功能:

SELECT Studentname,  Subject,  Marks, 
       RANK() OVER(PARTITION BY Studentname ORDER BY Sum_Marks DESC) Rank
FROM (SELECT er.*,
             SUM(Marks) OVER (PARTITION BY StudentName) as sum_marks
      FROM ExamResult
     ) er
ORDER BY Studentname