WITH rk as(SELECT user_id,s.problem_id,s.submitted,p.correct_answer,
ROW_NUMBER() over(partition by user_id,problem_id order by timestamp) NTH_SUBMISSION
FROM submissions as s
INNER JOIN problems as p on s.problem_id=p.problem_id
),ps_cnt AS(
SELECT NTH_SUBMISSION,
ROUND(COUNT(CASE WHEN submitted=correct_answer THEN 1 END)/COUNT(NTH_SUBMISSION)*100) as CORRECT_RATE
FROM rk
GROUP BY NTH_SUBMISSION
)
SELECT *
FROM ps_cnt
완벽하다고 생각하진 않지만 챗 GPT 선생님과 함께 꼬박 하루 걸려서 푼 문제... 이런 걸 1시간 반 안에 5문제를 어떻게 풀지..? (해야지 뭐..)
풀이 방법
1. 윈도우 함수 활용해서 제출 순서를 분류하는게 우선이였다고 생각했음
2. 제출순서별 정답률을 구하기 위해 group by를 써줘야 되기 때문에 가상 테이블을 1개 더 생성함
3. count(NTH_SUBMISSION) - 사용자의 제출순서별(1,2,3..) 제출 횟수 중 정답인거 고르면 정답률 나옴
다른 사람 답안 참고 안하고 푼 거여서 의미있다고 생각함
피드백
코딩테스트 준비 위해 문제보고 이해하며 시간 줄이는 방법 찾아야 함.(조언 환영 ㅎㅎ.!)
(쿼리의 오류나 더 좋은 쿼리 있으면 피드백 환영합니다!!)