6
これまでの投稿の回答を見ましたが、うまくいきますが、小さなジレンマがあります。 同じシナリオを取る:SQLの計算モード
クラスごとに生徒の成績を列挙した表。
BIO...B
CHEM...C
:私は次のようになり、結果セットをしたいです。
私は以下のクエリを適用したら、私は次の出力ました:2010年
Class | Score | Freq | Ranking
2010 | B | 8 | 1
2010 | C | 8 | 1
2011 | A | 10 | 1
2012 | B | 11 | 1
を、私は同じ周波数で2つのグレードがあります。どうすればいいですか?最高のスコアを表示したいだけです。この場合は「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
大丈夫、私は変更を加えました。それはうまく動作します。私はちょうどこのクエリでMIN関数の使用を消化しようとしています。ありがとう。 – Frida
MIN()の理由はアルファベットの中では「より高い」等級がより早く起こるからです。 2つがモードのために結ばれているときに、より良い等級を返すことを望むので、min関数を介してアルファベットの開始に近いものを見つけることは、これを行うのに役立ちます。 – zipppy