본문 바로가기

SQL/[HackerRank]

[HackerRank/MySQL] 15 Days of Learning SQL

728x90

< Problem >

날짜마다 제출한 해커의 수와 가장 많이 제출한 hacker_id, 이름 구하기

링크:  https://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


< Code >

SELECT SUBMISSION_DATE,
(SELECT COUNT(DISTINCT HACKER_ID)
 FROM SUBMISSIONS S2
 WHERE S2.SUBMISSION_DATE = S1.SUBMISSION_DATE AND (SELECT COUNT(DISTINCT S3.SUBMISSION_DATE)
                                                    FROM SUBMISSIONS S3
                                                    WHERE S3.HACKER_ID = S2.HACKER_ID
                                                    AND S3.SUBMISSION_DATE < S1.SUBMISSION_DATE)=DATEDIFF(S1.SUBMISSION_DATE , '2016-03-01')),
(SELECT HACKER_ID
 FROM SUBMISSIONS S2
 WHERE S2.SUBMISSION_DATE = S1.SUBMISSION_DATE
 GROUP BY HACKER_ID
 ORDER BY COUNT(SUBMISSION_ID) DESC, HACKER_ID LIMIT 1) AS TMP,
(SELECT NAME
 FROM HACKERS
 WHERE HACKER_ID = TMP)
FROM (SELECT DISTINCT SUBMISSION_DATE
      FROM SUBMISSIONS) S1
GROUP BY SUBMISSION_DATE

 

< Lesson & Learned >

SELECT: 키워드와 함께 검색하고 싶은 속성의 이름을 나열
COUNT( ):  속성 값의 개수를 검색하기 위한 집계함수. NULL 속성 값은 제외하고 계산됨.
DISTINCT: 결과 테이블이 튜플의 중복을 허용하지 않도록 지정
FROM: 키워드와 함께 검색하고 싶은 속성이 있는 데이블의 이름을 나열
WHERE: 키워드와 함께 비교 연산자(=, <, >=, <>)와 논리 연산자(AND, OR, NOT)를 이용한 검색 조건 제시

DATEDIFF(종료일, 시작일): 두 날짜 사이의 일수 계산. 종료일-시작일
LIMIT a: 첫번째 행에서부터 a개 데이터를 가져옴.
GROUP BY: 특정 속성의 값이 같은 투플을 모아 그룹을 만들고, 그룹별로 검색. HAVING 키워드를 이용해 그룹에 대한 조건을 작성함.
ORDER BY: 결과 테이블 내용을 원하는 순서로 출력. 오름차순(기본): ASC, 내림차순: DESC

728x90

'SQL > [HackerRank]' 카테고리의 다른 글

[HackerRank/MySQL] Draw The Triangle 2  (0) 2023.04.25
[HackerRank/MySQL] Draw The Triangle 1  (0) 2023.04.25
[HackerRank/MySQL] Interviews  (0) 2023.04.25
[HackerRank/MySQL] Symmetric Pairs  (0) 2023.04.14
[HackerRank/MySQL] Placements  (1) 2023.04.14