Desideri aiuto cercando di rango con un GROUP BY
-
19-09-2019 - |
Domanda
Ho problemi cercando di classificare ognuno dei nostri studenti, da parte del gruppo home sono in.
Esempio di dati falsi.
HomeGroup
1. Team RED
2. Team BLUE
3. Team Skeet
4. Team GREEN
Students
1. John, Score - 34, Team RED
2. Jill, Score - 87.3, Team RED
3. Fred, Score - 41, Team GREEN
4. Jane, Score 93, Team BLUE
...
ecc.
La mia uscita è il seguente
Scores
StudentId 1, Score 34, Rank - 5th
StudentId 2, Score 87.3, Rank - 1st
StudentId 3, Score 41, Rank - 9th
StudentId 4, Score 94, Rank - 1st.
Sto cercando di usare DENSE_RANK .. e che funziona bene se faccio funzionare questo contro un gruppo home SINGOLA (ad es. Gruppo home = 1) ... ma io non sono sicuro di come fare questo su tutto il Gruppo Home.
Sto indovinando ho bisogno di una query di aggiornamento, che ha un subquery ... e questo subquery ha il proprio sottoquery ... ??
Sono abbastanza confuso :( E io continuo a pensare a cursori maligni che mi rifiuto di usare a meno che non ho una pistola alla testa (perché credo che possa essere gestito correttamente con la notazione 'Set').
Soluzione
Per ottenere il DENSE_RANK di ogni studente nella squadra:
SELECT *, DENSE_RANK() OVER (PARTITION BY Team ORDER BY Score DESC)
FROM Students;
Non mi è chiaro che cosa si desidera che l'UPDATE però.