문제 사이트
아래 문제는 해커랭크에서 추출해온 문제입니다. 문제의 저작권은 해커랭크에 있으며 문제를 풀어보시려면 아래 링크를 클릭해주세요 🙂
Occupations | HackerRank
Pivot the Occupation column so the Name of each person in OCCUPATIONS is displayed underneath their respective Occupation.
www.hackerrank.com
👉문제 설명




- column은 Doctor, Professor, Singer, and Actor 순으로 분류
아래에는 직업에 해당하는 이름을 알파벳 순으로 정렬하고, 직업에 해당하는 이름이 더 이상 없을 때는 NULL 출력
👉문제 풀이
시작부터 어떻게 해야하는지 감이 오지 않는다,, 큰일이다
일단 조건부터 입력을 하면
1. 컬럼의 headers는 Doctor, Professor, Singer, Actor 순
2. 더이상 출력될 이름이 없으면 NULL 이라고 출력
👉문제 풀이 과정
1. 직업별로 나눈 후 이름순으로 순서 지정
select *,
row_number() over (partition by occupation order by name)
from occupations

- partition을 활용해 직업별로 이름순으로 순서를 지정해줌
- 나온 결과로는 Actor가 직업인 사람은 Eve, Jennifer, Ketty, Samantha 총 4명
- 위의 결과에서 이름만을 출력해서 세로로 줄세우면 답이 나올 거 같음
2. 직업별로 분류, 줄세우기
select
case when occupation = "DOCTOR" then name else null end,
case when occupation = "PROFESSOR" then name else null end,
case when occupation = "SINGER" then name else null end,
case when occupation = "ACTOR" then name else null end
from occupations

- occupation에 따른 결과값을 출력해야 하므로 case when절 사용
- Ashley는 직업이 Professor 여서 doctor, singer, actor에서는 NULL값이 출력되고 professor부분에서만 이름이 출력되는 것을 확인할 수 있음
위 두개를 합하여
👉최종 답안
select
max(case when occupation = "DOCTOR" then name else null end),
max(case when occupation = "PROFESSOR" then name else null end),
max(case when occupation = "SINGER" then name else null end),
max(case when occupation = "ACTOR" then name else null end)
from (select *,
row_number() over (partition by occupation order by name) rn
from occupations) as part
group by part.rn
- group by를 해준 이유 : 순서가 1인 아이들부터 출력이 되서 select문이 돌아감
- EX) rn이 1인 Eve, Amina, Ashely, Christeen이 먼저 select문에 들어가게 되고 case when문을 거쳐 해당하는 직업 블럭에 들어가 name이 출력된다
- max를 한 이유 : 한 행에 rn이 1인 이름들을 출력하기 위해 group by를 사용했지만 group by가 돌아가기 위해서는 select문에 집계함수가 있어야 함. name은 문자열이기 때문에 MAX 집계함수에 영향을 받지 않아 MAX를 사용, (MIN을 써도 됨)
- 서브쿼리를 사용할 때는 '(as) 이름' 을 꼭 해주어야 한다! 안 그러면 오류남
👉고찰
partition이나 row_number를 자주 사용 안 하다보니 이런 문제가 나오면 머리가 굳어버리는 거 같다,,
다양한 문제를 풀어볼 필요를 느꼈음
'SQL > MySQL' 카테고리의 다른 글
[MySQL] HackerRank - Type of Triangle 문제 풀이 / CASE WHEN (0) | 2024.10.18 |
---|---|
[MySQL] HackerRank - Binary Tree Nodes 문제 풀이 (0) | 2024.08.31 |
[MySQL] HackerRank - The PADS 문제 풀이 (0) | 2024.08.29 |
[MySQL] HackerRank - Contest Leaderboard 문제 풀이 (3) | 2024.08.28 |
[MySQL] HackerRank - Challenges 문제 풀이 (0) | 2024.08.16 |