7

我已经从以前的帖子中看到了答案,它工作正常,但我有一个小困境。采取同样的场景:


列出每个班级学生成绩的表格。我想要一个看起来像这样的结果集:

BIO...B 
CHEM...C 


其中“B”和“C”是班级的模式,想要获得班级的模式。

应用以下查询后,我得到以下输出:

Class | Score | Freq  |  Ranking 
2010  |   B   | 8     |    1 
2010  |   C   | 8     |    1 
2011  |   A   | 10    |    1 
2012  |   B   | 11    |    1

2010年,我有两个频率相同的年级。如果..我只想显示最高分,在这种情况下将是“B”。我怎样才能做到这一点?我需要为字母等级分配排名,但我不确定如何。请指教。谢谢。

上一篇: SQL Server 模式 SQL

我用来检索数据的查询是彼得的答案:

;WITH Ranked AS ( 
SELECT 
    ClassName, Grade 
    , GradeFreq = COUNT(*) 
    , Ranking = DENSE_RANK() OVER (PARTITION BY ClassName ORDER BY COUNT(*) DESC) 
FROM Scores 
GROUP BY ClassName, Grade 
) 
SELECT * FROM Ranked WHERE Ranking = 1
4

1 回答 1

8

改变:

SELECT * FROM Ranked WHERE Ranking = 1 

至:

SELECT Class, MIN(Grade) AS HighestGrade, Freq, Ranking
FROM Ranked
WHERE Ranking = 1
GROUP BY Class, Freq, Ranking
于 2012-11-07T21:20:23.870 回答