본문 바로가기
HackerRank - MS SQL Server

[해커랭크/MS SQL] 15 Days of Learning SQL

by nomeleon 2022. 4. 26.
반응형

 

문제 링크입니다!

 

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

 

댓글