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年には、同じ頻度の2つの成績があります。最高のスコアを表示したい場合は、この場合は「B」になります。どうすればそれを達成できますか?文字の成績にランキングを付ける必要がありますが、どうすればいいのかわかりません。お知らせ下さい。ありがとう。

以前の投稿: SQLServerモードSQL

データを取得するために使用したクエリは、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
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 に答える