如何分组并在 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
我想根据 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