반응형
문제 링크입니다!
15 Days of Learning SQL | HackerRank
find users who submitted a query every day.
www.hackerrank.com
문제
=> Julia는 15일 간의 SQL 학습 대회를 실시했다.
콘테스트의 시작 날짜는 2016년 3월 1일이었고 종료 날짜는 2016년 3월 15일이었다.
매일(콘테스트 첫날부터) 최소 1개의 제출을 한 고유 해커의 총 수를 출력하는 쿼리를 작성하고, 매일 최대 제출 수를 제출한 해커의hacker_id와 이름을 찾아라.
이러한 해커가 최대 제출 수를 가진 경우 가장 낮은 해커 ID를 출력해라.
쿼리는 날짜별로 정렬된 컨테스트의 각 날짜에 대해 이 정보를 출력해라.
풀이
select a3.submission_date, a3.cnt, b3.min_hacker_id, b3.name
from (
select a2.submission_date, count(distinct b2.hacker_id) [cnt]
from (
select submission_date
, dense_rank() over(order by submission_date) [rank_date]
from (
select distinct submission_date
from submissions
) a
) a2
join (
select submission_date
, a.hacker_id
, b.name
, dense_rank() over(partition by a.hacker_id order by submission_date) [rank_hacker]
from submissions a
join hackers b
on a.hacker_id = b.hacker_id
) b2
on a2.submission_date = b2.submission_date
and a2.rank_date = b2.rank_hacker
group by a2.submission_date
) a3
join (
select a2.submission_date, a2.min_hacker_id, b2.name
from (
select a.submission_date, min(a.hacker_id) [min_hacker_id]
from (
select submission_date, hacker_id, count(*) [cnt]
from submissions
group by submission_date, hacker_id
) a
join (
select submission_date, max(cnt) [max_cnt]
from (
select submission_date, hacker_id, count(*) [cnt]
from submissions
group by submission_date, hacker_id
) a
group by submission_date
) b
on a.submission_date = b.submission_date
and a.cnt = b.max_cnt
group by a.submission_date
) a2
join hackers b2
on a2.min_hacker_id = b2.hacker_id
) b3
on a3.submission_date = b3.submission_date
order by a3.submission_date
'HackerRank - MS SQL Server' 카테고리의 다른 글
[해커랭크/MS SQL] Print Prime Numbers (0) | 2022.04.26 |
---|---|
[해커랭크/MS SQL] Interviews (0) | 2022.04.26 |
[해커랭크/MS SQL] Placements (0) | 2022.04.22 |
[해커랭크/MS SQL] Symmetric Pairs (1) | 2022.04.12 |
[해커랭크/MS SQL] SQL Project Planning (0) | 2022.04.08 |
댓글