홍동이의 성장일기

[HackerRank] Occupations 본문

Tool/SQL 코딩테스트 풀이

[HackerRank] Occupations

홍동2 2023. 10. 2. 03:20

 

Occupations | HackerRank

Pivot the Occupation column so the Name of each person in OCCUPATIONS is displayed underneath their respective Occupation.

www.hackerrank.com

 

 

💡 문제풀이

 

 1. 직업별로(PARTITION BY occupation) 이름을 알파벳순으로(ORDER BY name) 순위를 매겨줍니다.

SELECT occupation
        , name
        , ROW_NUMBER() OVER (PARTITION BY occupation ORDER BY name) as rn
FROM occupations

 

 

2. 피벗을 위해 CASE WHEN 구문을 사용합니다.

SELECT rn
        , CASE WHEN occupation = 'doctor' THEN name END
        , CASE WHEN occupation = 'professor' THEN name END
        , CASE WHEN occupation = 'singer' THEN name END
        , CASE WHEN occupation = 'actor' THEN name END
FROM (
    SELECT occupation
            , name
            , ROW_NUMBER() OVER (PARTITION BY occupation ORDER BY name) as rn
    FROM occupations
    ) as t

 

rn이 1인 행을 살펴보면 다음과 같습니다.

WHERE rn = 1

 

 

3. NULL을 제외하고 이름만 나타내주기 위해서 rn을 기준으로 GROUP BY를 해줍니다. 이 때 SELECT 절의 집계는 아무것이나 사용해주어도 괜찮습니다.

SELECT MIN(CASE WHEN occupation = 'doctor' THEN name END)
        , MIN(CASE WHEN occupation = 'professor' THEN name END)
        , MIN(CASE WHEN occupation = 'singer' THEN name END)
        , MIN(CASE WHEN occupation = 'actor' THEN name END)
FROM (
    SELECT occupation
            , name
            , ROW_NUMBER() OVER (PARTITION BY occupation ORDER BY name) as rn
    FROM occupations
    ) as t
GROUP BY rn
ORDER BY rn

 

※ NULL로 시작하는 4번째 행을 살펴보면 doctor에 해당되는 name이 없습니다. 따라서 첫번째 열의 값이 NULL로 나옵니다.

 


📍본 내용은  '[백문이불여일타] 데이터 분석을 위한 고급 SQL 문제풀이'를  수강하며 작성한 내용입니다.

728x90
Comments