rand(life)

우선순위 부여하여 동점자 석차 구하기 본문

컴퓨터/엑셀

우선순위 부여하여 동점자 석차 구하기

flogsta 2012. 4. 9. 09:11

오래전에 쓴 글에서 sumproduct함수를 설명하면서 동점자가 나왔을 때 추가의 기준을 적용하여 순위를 결정하는 방법을 설명한 적이 있습니다. (예를 들어, 총점이 같을 경우 국어 점수가 높은 학생이 순위를 높게 하는 경우) rank함수를 써서 순위를 구하고, 동점자의 경우 자신보다 총점이 같으면서 국어점수가 높은 학생의 수를 구해서 순위에다 더해주는 방법이었습니다.

참고: http://flogsta.tistory.com/418

그 글에서, 하나의 기준이 아니라, 제2,제3,제4의 기준을 주려면 어떻게 해야하나는 문제에 대해서는 답을 내놓지 못했습니다.(예를 들어, 총점이 같을 경우, 국어점수를 우선으로, 국어점수도 같으면 영어점수, 영어점수도 같으면 수학점수….)

물론 rank와 sumproduct를 더하는 위의 방법을 쓸 수도 있습니다. 하지만 우선순위가 많아질수록 수식이 기하급수적으로 늘어납니다.

위의 그림에서처럼, 국어/영어/수학의 순서로 우선순위를 부여하면 수식이 저렇게 길어지게 됩니다.

더 좋은 방법을 발견할 수 없어 포기하고 있었는데, 지식인에 검색을 해보니 비슷한 고민을 하고 있는 사람의 질문에 답이 달려있었습니다.

참고: http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=102020101&docId=72155130&qb=7JeR7IWAIOuPmeygkOyekA==&enc=utf8&section=kin&rank=49&search_sort=0&spq=0

지식인 답변을 참고하여 수식을 만들어 보았습니다.

이것도 짧은 수식은 아닙니다만, 가중치를 부여하는 기준이 아무리 많아져도 수식의 길이가 더이상 길어지지 않는다는 장점이 있습니다. 가중값을 구하는 열만 하나 만들면 되는 겁니다.

수식의 기본적인 틀은, 총점이 같은 인원수가 1이면 보통의 RANK함수를 사용하고, 1보다 크면(총점이 같은 인원수가 2이상이면) 보통의 RANK함수에다 가중값이 자신보다 큰 인원수를 더합니다.

그래서 총점상으로는 공동1위이지만, 가중값이 자신보다 큰 인원이 3명 있으면 자신의 최종 순위는 4위(1+3=4)가 되는 것입니다.

이 가중값은 국어에 가장 크고, 그 다음이 영어>수학>과학의 순입니다.

'가중값'이라고 된 부분에 들어가는 수식은 다음과 같습니다.

국어점수에는 101의 3제곱(1,030,301)을 곱하고, 영어점수에는 101의 2제곱(10,201), 수학점수에는 101을 곱하고, 과학점수에는 아무것도 곱하지 않고 이 모든 값을 더한 것입니다. 따라서, 수학이 0점인 학생은 과학이 100점이라고 해도 수학에서 1점 을 맞은 동점자에게 순위에서는 밀리게 됩니다.

첨부한 파일을 참고하세요.

엑셀-동점자순위(가중치이용).xlsx