SQL中的计算模式

SQL中的计算模式,sql,mode,Sql,Mode,我在以前的一篇文章中看到了答案,虽然效果不错,但我有一个小难题。 采取同样的方案: 列出每个班级学生成绩的表格。我想要一个如下所示的结果集: BIO...B CHEM...C 其中“B”和“C”是类的模式,并且希望获得类的模式 应用以下查询后,我得到以下输出: Class | Score | Freq | Ranking 2010 | B | 8 | 1 2010 | C | 8 | 1 2011 | A | 10

我在以前的一篇文章中看到了答案,虽然效果不错,但我有一个小难题。 采取同样的方案:


列出每个班级学生成绩的表格。我想要一个如下所示的结果集:

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”。我怎样才能做到这一点?我需要为字母等级分配排名,但我不确定如何分配。请告知。 谢谢

前任职务:

我用来检索数据的查询是Peter的回答:

;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
更改:

SELECT * FROM Ranked WHERE Ranking = 1 
致:


好的,我改了。它很好用。我只是想了解一下MIN函数在这个查询中的用法。谢谢。MIN()之所以有效,是因为字母表中“更高”的分数恰好在较早的位置。由于您希望在两个模式并列时返回更好的分数,因此通过min函数找到更靠近字母表开头的一个有助于实现这一点。
SELECT Class, MIN(Grade) AS HighestGrade, Freq, Ranking
FROM Ranked
WHERE Ranking = 1
GROUP BY Class, Freq, Ranking