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
'Be Smart > SQL' 카테고리의 다른 글
[Oracle] HackerRank 문제 정리 - 5 (0) | 2022.08.04 |
---|---|
[Oracle] HackerRank 문제 정리 - 3 (0) | 2022.08.02 |
[Oracle] HackerLank-Weather Observation Station 5 문제 (0) | 2022.07.27 |
[ Oracle ] 조건별로 우선 정렬하기 ORDER BY DECODE/CASE (0) | 2022.04.29 |
[SQL] WITH 절 (0) | 2021.12.24 |
댓글