본문 바로가기
Be Smart/SQL

[Oracle] HackerRank 문제 정리 - 1

by 반월하 2022. 8. 1.
728x90

문제 개요


Hackers 테이블

Challenges 테이블

해커 ID , 이름 및 각 학생이 생성한 총 챌린지 수 를 출력하는 쿼리를 작성하십시오 . 

총 챌린지 수를 기준으로 결과를 내림차순으로 정렬합니다. 

두 명 이상의 학생이 같은 수의 도전 과제를 만든 경우 해커 ID를 기준으로 결과를 정렬 합니다 . 

두 명 이상의 학생이 동일한 수의 도전 과제를 생성하고 개수가 생성된 최대 과제 수보다 적은 경우 해당 학생을 결과에서 제외합니다.

WITH data AS (
SELECT c.hacker_id as id, h.name as name, count(c.hacker_id) as cnt
FROM Hackers h
JOIN Challenges c on c.hacker_id = h.hacker_id
GROUP BY c.hacker_id, h.name)
SELECT id, name, cnt
FROM data
where 1=1
and cnt = (select max(cnt) from data) OR cnt in (select cnt from data group by cnt having count(cnt) = 1)
order by cnt desc, id;

내가 직접 코드를 설정해서 푸는 걸 실패하여
Discusstion에 있는 클린 코드를 참고하여 문제를 풀 수 있었다.

with 문을 통해 id, name을 묶어준 뒤 그 수를 세어서 data라는 테이블을 미리 만들었고,
그 테이블을 조회하여 max 함수를 사용 수가 제일 많은 챌린지를 뽑아주고 그 아래의 것들은 1개인 것들만 뽑아서 조회해주었다.

728x90

댓글