Ho visto la risposta di un post precedente, che funziona bene ma ho un piccolo dilemma. Lo stesso scenario:Calcola modalità in SQL
Una tabella che elenca i voti degli studenti per classe. Voglio un set di risultati che assomiglia:
BIO...B
CHEM...C
dove il "B" e "C" sono le modalità per la classe e vogliono ottenere la modalità per la classe.
Una volta applicato il domanda sotto, ho ottenuto il seguente risultato:
Class | Score | Freq | Ranking
2010 | B | 8 | 1
2010 | C | 8 | 1
2011 | A | 10 | 1
2012 | B | 11 | 1
Nel 2010, ho due gradi con la stessa frequenza. Cosa succede se ... Voglio solo mostrare il punteggio più alto, in questo caso sarà "B". Come posso ottenerlo? Avrei bisogno di assegnare classifiche ai voti delle lettere, ma non sono sicuro di come. Si prega di avvisare. Grazie.
Prima postale: SQL Server mode SQL
La query che ho usato per recuperare i dati è stata la risposta di 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
ok, ho fatto il cambiamento. Funziona bene. Sto solo cercando di digerire l'utilizzo della funzione MIN in questa query. Grazie. – Frida
Il motivo per cui MIN() funziona è perché i gradi "più alti" si trovano prima nell'alfabeto. Dal momento che si desidera restituire il voto migliore quando due sono legati per la modalità, trovare quello più vicino all'inizio dell'alfabeto, tramite la funzione min, aiuta a farlo accadere. – zipppy