문제
아래 결과를 출력하는 SQL의 빈칸에 적절한 것은?
SQLSELECT 이름, 점수, (SELECT ( 1 ) FROM 점수테이블 T2 WHERE ( 2 )) AS 순위 FROM 점수테이블 T1 ORDER BY 순위;
<조건> 자기보다 점수가 높은 행의 개수에 1을 더해 등수를 구한다.
① (1) COUNT() + 1, (2) T1.점수 < T2.점수 ② (1) COUNT(), (2) T1.점수 = T2.점수 ③ (1) RANK() + 1, (2) T1.점수 > T2.점수 ④ (1) SUM(점수), (2) T1.점수 < T2.점수
정답
1번
해설
정답: 1. 자신보다 점수가 높은 행의 개수를 세고 1을 더하면 등수를 구할 수 있으므로 COUNT(*) + 1과 T1.점수 < T2.점수가 적절하다.
오답 풀이
- 1번: 자기보다 높은 점수의 개수 + 1로 순위를 구한다.
- 2번: 같은 점수의 개수를 세므로 순위가 아니다.
- 3번: 서브쿼리 내부에서 RANK()를 그렇게 사용할 수 없다.
- 4번: 점수 합계를 구하는 식으로 순위 계산과 다르다.
보충 개념 셀프 조인 또는 상관 서브쿼리로 순위를 계산할 수 있다. 현재 행보다 큰 값의 개수에 1을 더하면 내림차순 기준 순위가 된다.