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' 표기법으로 올바르게 처리할 수 있다고 믿기 때문입니다).
해결책
팀 내 각 학생의density_rank를 얻으려면:
SELECT *, DENSE_RANK() OVER (PARTITION BY Team ORDER BY Score DESC)
FROM Students;
그래도 업데이트를 원하는 것이 무엇인지 명확하지 않습니다.
제휴하지 않습니다 StackOverflow