📚문제
📌문제 설명
Name, Occupation 2가지 열로 이루어진 Occupations 테이블에서
Occupation 열을 pivot 시켜서 각 직업( 총 4가지 )별로 이름을 알파벳 순서대로 나열하면 됨 ( 빈 칸은 NUll 값으로 )
📝풀이
# Leaderboard의 정답 풀이
select
max(case when occupation = 'Doctor' then name end) 'Doctor',
max(case when occupation = 'Professor' then name end) 'Professor',
max(case when occupation = 'Singer' then name end) 'Singer',
max(case when occupation = 'Actor' then name end) 'Actor'
from (
select *, row_number() over (partition by occupation order by name) rn
from occupations
) t
group by rn
몇 주 전까지 Hackerrank 문제 수월하게 풀어나가다가
이 문제에서 급 어려워져서 잠깐 멈췄었다
Leaderboard를 잠깐 확인해 보니 RANK,PARTITTION등의 고급 스킬이 필요한 것 같아서
우선 제쳐두고 GA4 수강과 프로그래머스 , solvesql 문제풀이 등에 집중했었다
그리고 이제 프로그래머스와 solvesql 문제는 다 풀게 되서 다시 차근차근 풀어보기...
+ 아니... Leaderboard의 MySQL풀이를 따라하고 있었는데
도저히 답처럼 나올것같지가 않아서 코드 그대로 복붙해서 한 번 제출해보니 오답이라고 뜸.....뭐지
그래서 다른 풀이로 대체
✅Leaderboard의 풀이를 참고하여 1스텝씩 이해하면서 해보기
💡머릿속으로 이해가 잘 안되서 cmd창에 mysql을 실행시켜 문제 예시와 같이 테이블 생성
1. 윈도우 함수(row_number) 활용
SELECT *
, ROW_NUMBER() OVER (PARTITION BY Occupation ORDER BY Name) rn
FROM Occupations
✔️OVER (PARTITION BY...)
● 그룹 단위로 나누겠다
✔️ROW_NUMBER()
● 순서대로 번호 부여하는 윈도우 함수. 각 행에 대해 정수값 할당하며, 정렬 기준에 따라 증가
✔️PARTITON BY Occupation() / ORDER BY Name
● row_number() 함수에 대한 파티션 지정. 각 직업(Occupation)에 대해서 이름(Name)의 알파벳 기준으로 순서 부여
✔️rn
● 순위 나타내는 별칭. ROW_NUMBER()의 값이 여기 저장됨
2. rn으로 그룹화 후, 4가지 직업별 IF 문 생성
SELECT MAX(IF(occupation = 'Doctor',name,NULL)) 'Doctor'
, MAX(IF(occupation = 'Professor',name,NULL)) 'Professor'
, MAX(IF(occupation = 'Singer',name,NULL)) 'Singer'
, MAX(IF(occupation = 'Actor',name,NULL)) 'Acctor'
FROM (SELECT *,
row_number() over (partition by occupation order by name) rn
FROM Occupations) t
GROUP BY rn
rn으로 그룹화 하면 각각 1,2,3으로 그룹화가 된다
여기서 숫자가 의미하는 바는 작아질수록 알파벳 앞쪽순서 ( 우선순위 )
따라서
Doctor Professor Singer Actor
rn = 1 => Jenny Ashley Meera Jane
.
.
.
의 형태로 나오게 된다
💡MAX를 해주는 이유는 잘 모르겠지만 그룹화 하기 위해서..? 라고 생각하고
참고한 링크에서도 그렇게 얘기하시는 것 같다 🤔
진짜 어렵다..예제로만 보던 pivot과 너무 다르다
역시 실전은 훨씬 어렵구나
데이터리안 실전반을 수강해야하나 고민했는데 해야될...듯
참고링크 출처 : https://velog.io/@beemo/SQL-HackerRank-Occupations
'SQL > HackerRank (SQL문풀)' 카테고리의 다른 글
Hackerrank / Basic Join / Top Competitors / MySQL (0) | 2024.01.09 |
---|---|
**Hackerrank / Aggregation / Weather Observation Station 20 / MySQL ** (0) | 2024.01.08 |
Hackerrank / Advanced Join / Symmetric Pairs / MySQL (0) | 2023.10.20 |
Hackerrank / Advanced Join / Placements / MySQL (0) | 2023.10.19 |
Hackerrank / Advanced Select / The PADS / MySQL (0) | 2023.10.19 |