반응형

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%
각 대회(contest)별로 등록한 사용자 비율(%)을 구하는 문제입니다.
- 전체 사용자 수를 기준으로 계산합니다.
- 결과는 소수점 둘째 자리까지 반올림합니다.
- 출력은 percentage 내림차순, 동일하면 contest_id 오름차순으로 정렬합니다.
SELECT
contest_id,
round(count(*)/(SELECT COUNT(*) FROM Users) * 100, 2) as percentage
FROM
Register
GROUP BY
contest_id
ORDER BY
percentage DESC,
contest_id ASC;
- COUNT(*)는 해당 대회에 등록한 사용자 수를 셉니다.
- 전체 사용자 수는 Users 테이블에서 서브쿼리로 계산합니다.
- 사용자 비율은 (대회 등록 사용자 수 / 전체 사용자 수) * 100 공식으로 구하고, ROUND(..., 2)로 소수 둘째 자리까지 반올림합니다.
- 마지막으로 ORDER BY를 이용해 조건에 맞게 정렬합니다.
반응형
'Computer Science > SQL' 카테고리의 다른 글
| SQL | LeetCode 1193. 월별, 국가별 거래 요약 통계 구하기 (1) | 2025.05.09 |
|---|---|
| SQL | LeetCode 1211. Query 품질과 Poor Query 비율 계산하기 (0) | 2025.05.08 |
| SQL | LeetCode 1251. 날짜 범위 매핑으로 평균 판매가 구하기 (0) | 2025.05.06 |
| SQL | LeetCode 1934. 사용자 확인률 계산하기 (LEFT JOIN과 COALESCE, AVG()의 조합) (0) | 2025.05.05 |
| SQL | LeetCode 570. 직속 부하 직원이 5명 이상인 매니저 찾기 (0) | 2025.05.04 |