Besoin d'aide pour essayer de RANK avec un GROUP BY
-
19-09-2019 - |
Question
Je vais avoir du mal à essayer de classer chacun de nos étudiants, par le groupe résidentiel qu'ils sont.
Exemple de données fausses.
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
...
etc.
Ma sortie est dans ce qui suit
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.
Je suis en train d'utiliser DENSE_RANK .. et qui fonctionne bien si je lance ce contre un groupe résidentiel unique (par exemple. Homegroup = 1) ... mais je ne suis pas sûr de savoir comment faire cela sur toutes les Homegroups.
Je devine que j'ai besoin d'une requête de mise à jour, qui a une sous-requête ... et ce sous-requête a son propre sous-requête ... ??
Je suis assez confus :( Et je continue à penser sur les curseurs mal que je refuse d'utiliser à moins que j'ai un pistolet sur ma tête (parce que je crois qu'il peut être manipulé correctement avec la notation « Set »).
La solution
Pour obtenir le DENSE_RANK de chaque élève dans l'équipe:
SELECT *, DENSE_RANK() OVER (PARTITION BY Team ORDER BY Score DESC)
FROM Students;
est-ce pas clair pour moi ce que vous voulez UPDATE bien.