(25.07.22)
초안은 아래와 같다.
# Write your MySQL query statement below
# Users테이블은 유저 아이디, 이름
# Register테이블은 유저가 가입한 대회 아이디
# 각 대회에 참여한 유저의 참여율을 소수점 두자리까지.
# 퍼센트는 내림차순으로, 같은 경우 contest_id 오름차순으로 정렬
SELECT r.contest_id, ROUND(COUNT(u.user_id)/3*100, 2) as percentage
FROM Users as u JOIN Register as r
ON u.user_id = r.user_id
GROUP BY r.contest_id
ORDER BY percentage DESC, contest_id ASC
;
여기서 관권은 저 3이다. 지금은 testcase1을 통과하기 위해 3을 직접 입력했지만, 전체 user_id의 개수를 계산해야한다. 다만 연산자가 ORDER BY처리가 되기에 어떻게 해야하는지 고민이다.
조인하기 전에 COUNT(u.user_id)를 어떻게 얻어낼까?
반대로 조인한 후의 결과를 이용해서 전의 결과를 계산할 수 있지 않을까
혹은 join한 뒤에 null을 제외한다면?
(25.07.23)
# Write your MySQL query statement below
# Users테이블은 유저 아이디, 이름
# Register테이블은 유저가 가입한 대회 아이디
# 각 대회에 참여한 유저의 참여율을 소수점 두자리까지.
# 퍼센트는 내림차순으로, 같은 경우 contest_id 오름차순으로 정렬
SELECT r.contest_id, SUM(IF(u.user_id=r.user_id,1,0))
FROM Users as u CROSS JOIN Register as r
GROUP BY contest_id
;

다음과 같이도 접근해보았지만 여전히 뭐로 나눠야하는지 즉 u.user_id의 개수를 가져오기 힘들어보인다.
아래 처럼 식을 바꾸고 싶은건데.. 좋은 방법이 없을까?
SELECT r.contest_id, ROUND(COUNT(u.user_id)/(SELECT COUNT(user_id) FROM Users)*100, 2) as percentage
FROM Users as u JOIN Register as r
ON u.user_id = r.user_id
GROUP BY r.contest_id
ORDER BY percentage DESC, contest_id ASC
;
어라 되네?
