Ich habe die Antwort von einem früheren Post gesehen, die gut funktioniert, aber ich habe ein kleines Dilemma. Unter dem gleichen Szenario:Calculate Modus in SQL
Eine Tabelle, die Schüler Noten pro Klasse auflisten. Ich möchte eine Ergebnismenge, die wie folgt aussieht:
BIO...B
CHEM...C
Wo die „B“ und „C“ sind die Modi für die Klasse und den Modus für die Klasse zu erhalten.
Sobald ich die unten Abfrage angewendet, ich erhielt die folgende Ausgabe:
Class | Score | Freq | Ranking
2010 | B | 8 | 1
2010 | C | 8 | 1
2011 | A | 10 | 1
2012 | B | 11 | 1
Im Jahr 2010 habe ich zwei Typen mit der gleichen Frequenz. Was wäre, wenn .. Ich möchte nur die höchste Punktzahl anzeigen, in diesem Fall wird "B" sein. Wie kann ich das erreichen? Ich müsste den Briefnoten Ranglisten zuordnen, bin mir aber nicht sicher wie. Bitte beraten. Danke.
Vor Beitrag: SQL Server mode SQL
Die Abfrage, die ich verwendet, um die Daten die Antwort auf Abrufen von Peter war:
;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
ok, ich habe das geändert. Es funktioniert gut. Ich versuche nur die Verwendung der MIN-Funktion in dieser Abfrage zu verdauen. Vielen Dank. – Frida
Der Grund, warum MIN() funktioniert, ist, weil höhere Grade früher im Alphabet vorkommen. Da Sie die bessere Note zurückgeben wollen, wenn zwei für den Modus gebunden sind, hilft es, das zu finden, das näher am Anfang des Alphabets ist, über die Funktion min. – zipppy