Нужна помощь при попытке РЕЙТИНГОВАТЬ с помощью GROUP BY
-
19-09-2019 - |
Вопрос
У меня возникли проблемы с попыткой ранжировать каждого из наших учеников по домашней группе, в которой они находятся.
Пример фейковых данных.
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
...
и т. д.
Мой вывод заключается в следующем
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.
Я пытаюсь использовать DENSE_RANK..и это отлично работает, если я запускаю это для ОДНОЙ домашней группы (например.домашняя группа = 1)...но я не уверен, как это сделать для ВСЕХ домашних групп.
Я предполагаю, что мне нужен запрос на обновление, который имеет подзапрос...и у этого подзапроса есть собственный подзапрос...??
Я в полном замешательстве :( И я продолжаю думать о злых курсорах, которые я отказываюсь использовать, пока не приставлю к голове пистолет (потому что я верю, что с ними можно правильно справиться с помощью обозначения «Set»).
Решение
Чтобы получить плотность_ранга каждого ученика в команде:
SELECT *, DENSE_RANK() OVER (PARTITION BY Team ORDER BY Score DESC)
FROM Students;
Мне не ясно, чего вы хотите от ОБНОВЛЕНИЯ.