2012-11-07 51 views
6

我已經看到了以前的帖子的答案,這工作正常,但我有一個小小的困境。 採取相同的情景:在SQL中計算模式


一張表,列出學生的成績每班。我想要的結果集,看起來像:

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 mode 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 

回答

5

變化:

​​

要:

SELECT Class, MIN(Grade) AS HighestGrade, Freq, Ranking 
FROM Ranked 
WHERE Ranking = 1 
GROUP BY Class, Freq, Ranking 
+0

好的,我做了改變。它工作正常。我只是試圖在這個查詢中消化MIN函數的使用。謝謝。 – Frida

+0

MIN()的工作原因是因爲「更高」的成績正好在字母表的前面。既然你想在兩個模式綁定的時候返回更好的成績,那麼通過min函數找到更接近字母表開頭的那個,這有助於做到這一點。 – zipppy