본문 바로가기
SQL

[HackerRank] Occupations 풀이 (Oracle)

by 유림유림 2021. 3. 8.
반응형

문제

Occupations | HackerRank

 

Occupations | HackerRank

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

www.hackerrank.com

 

문제 해설

직업(Occupation) 컬럼을 피벗하여 해당 직업 아래에 이름(Name)을 알파벳 순으로 정렬하여 출력합니다.

출력 열 헤더는 각각 Doctor, Professor, Singer, Actor여야 합니다.

참고: 직업에 해당하는 이름이 더이상 없으면 NULL을 출력합니다.

 

Occupations 테이블

행을 열로 바꾸는 문제입니다.

 

풀이

MIN, DECODE를 통해 구현할 수 있습니다.

SELECT MIN(DECODE(OCCUPATION, 'Doctor', NAME))    Doctor
     , MIN(DECODE(OCCUPATION, 'Professor', NAME)) Professor
     , MIN(DECODE(OCCUPATION, 'Singer', NAME))    Singer
     , MIN(DECODE(OCCUPATION, 'Actor', NAME))     Actor
  FROM (
        SELECT OCCUPATION, NAME
             , ROW_NUMBER() OVER(PARTITION BY OCCUPATION ORDER BY NAME) RN
          FROM OCCUPATIONS
       )
 GROUP BY RN
 ORDER BY 1, 2, 3, 4
;

 

Oracle 11g 이상 버전의 경우 PIVOT 함수를 사용할 수도 있습니다.

SELECT Doctor, Professor, Singer, Actor
  FROM (
        SELECT OCCUPATION, NAME
             , ROW_NUMBER() OVER(PARTITION BY OCCUPATION ORDER BY NAME) RN
          FROM OCCUPATIONS
       )
 PIVOT (
        MIN(NAME) FOR OCCUPATION IN ('Doctor'    AS Doctor
                                   , 'Professor' AS Professor
                                   , 'Singer'    AS Singer
                                   , 'Actor'     AS Actor)
       )
 ORDER BY 1, 2, 3, 4
;

 

결과

 

반응형

댓글