以前の投稿からの回答を見ましたが、これは問題なく機能しますが、小さなジレンマがあります。同じシナリオを取る:
クラスごとの生徒の成績を一覧表示した表。次のような結果セットが必要です。
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