반응형

www.hackerrank.com/challenges/15-days-of-learning-sql/problem

 

15 Days of Learning SQL | HackerRank

find users who submitted a query every day.

www.hackerrank.com

해결 방법 : 서브 쿼리 JOIN

  • 현재까지 매일 submission하고 있는 사람을 구하기 위한 JOIN 
    • (현재 날짜 - contest 첫째 날짜)가 현재 날짜 이전의 distinct submission 횟수와 같은지 판별했다.
  • 각 날짜별 가장 많이 submission한 사람 구하는 JOIN : 코드 참고

(어려웠다.. 조만간 다시 풀어보자.)

SELECT s.submission_date, s_count.hacker_count, s_best.best_hacker, h.name
FROM submissions as s
JOIN ( -- 현재까지 매일 submission 하는 hackers
    SELECT submission_date, count(distinct hacker_id) as hacker_count
    FROM submissions as s1
    WHERE submission_date - DATE('2016-03-01') = (
        SELECT count(distinct submission_date)
        FROM submissions as s2
        WHERE s2.submission_date < s1.submission_date
        and s2.hacker_id = s1.hacker_id
        )
    GROUP BY submission_date
    ) as s_count on s.submission_date = s_count.submission_date
JOIN ( -- 각 날짜별 가장 많이 submission한 hacker 
    SELECT submission_date, hacker_id as best_hacker
    FROM submissions as s3
    WHERE hacker_id = (
        SELECT hacker_id
        FROM submissions as s4
        WHERE s4.submission_date = s3.submission_date
        GROUP BY hacker_id
        ORDER BY count(submission_id) desc, hacker_id limit 1
        )
    GROUP BY submission_date, hacker_id
    ) as s_best on s.submission_date = s_best.submission_date
JOIN hackers as h on s_best.best_hacker = h.hacker_id
GROUP BY s.submission_date, s_count.hacker_count, s_best.best_hacker, h.name
ORDER BY s.submission_date;
반응형

'IT study > SQL' 카테고리의 다른 글

New Companies (+ 형 변환)  (0) 2021.04.22
Binary Tree Nodes  (0) 2021.04.18
Occupations (SET, CASE)  (0) 2021.04.17
Interviews  (0) 2021.04.15
The PADS (CONCAT, SUBSTR)  (0) 2021.04.13

+ Recent posts