Вопрос

У меня возникли проблемы с попыткой ранжировать каждого из наших учеников по домашней группе, в которой они находятся.

Пример фейковых данных.

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;

Мне не ясно, чего вы хотите от ОБНОВЛЕНИЯ.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top