[SQL 문제 풀이] Percentage of Users Attended a Contest (대회에 참석한 사용자 비율)

Stupefyee's avatar
Jun 13, 2025
[SQL 문제 풀이] Percentage of Users Attended a Contest (대회에 참석한 사용자 비율)
Percentage of Users Attended a Contest - LeetCode
Can you solve this real interview question? Percentage of Users Attended a Contest - Table: Users +-------------+---------+ | Column Name | Type | +-------------+---------+ | user_id | int | | user_name | varchar | +-------------+---------+ user_id is the primary key (column with unique values) for this table. Each row of this table contains the name and the id of a user.   Table: Register +-------------+---------+ | Column Name | Type | +-------------+---------+ | contest_id | int | | user_id | int | +-------------+---------+ (contest_id, user_id) is the primary key (combination of columns with unique values) for this table. Each row of this table contains the id of a user and the contest they registered into.   Write a solution to find the percentage of the users registered in each contest rounded to two decimals. Return the result table ordered by percentage in descending order. In case of a tie, order it by contest_id in ascending order. The result format is in the following example.   Example 1: Input: Users table: +---------+-----------+ | user_id | user_name | +---------+-----------+ | 6 | Alice | | 2 | Bob | | 7 | Alex | +---------+-----------+ Register table: +------------+---------+ | contest_id | user_id | +------------+---------+ | 215 | 6 | | 209 | 2 | | 208 | 2 | | 210 | 6 | | 208 | 6 | | 209 | 7 | | 209 | 6 | | 215 | 7 | | 208 | 7 | | 210 | 2 | | 207 | 2 | | 210 | 7 | +------------+---------+ Output: +------------+------------+ | contest_id | percentage | +------------+------------+ | 208 | 100.0 | | 209 | 100.0 | | 210 | 100.0 | | 215 | 66.67 | | 207 | 33.33 | +------------+------------+ Explanation: All the users registered in contests 208, 209, and 210. The percentage is 100% and we sort them in the answer table by contest_id in ascending order. Alice and Alex registered in contest 215 and the percentage is ((2/3) * 100) = 66.67% Bob registered in contest 207 and the percentage is ((1/3) * 100) = 33.33%
Percentage of Users Attended a Contest - LeetCode
notion image
각 대회에 등록된 사용자의 비율을 소수점 두 자리로 반올림하여 구할 수 있는 해결책을 작성하세요. 결과 테이블을 내림차순으로 백분율 순서대로 반환합니다. 동점일 경우, 오름차순으로 contest_id 순서대로 정렬합니다.
 

내가 작성한 쿼리

MySQL, Oracle

SELECT r.contest_id, -- (등록 유저 수 / 전체 유저 수) * 100 ROUND(COUNT(DISTINCT r.user_id) * 100.0 / (SELECT COUNT(*) FROM Users), 2) AS percentage FROM Register r GROUP BY r.contest_id ORDER BY percentage DESC, r.contest_id ASC;
Share article

stupefyee