반응형
문제
문제 해설
직업(Occupation) 컬럼을 피벗하여 해당 직업 아래에 이름(Name)을 알파벳 순으로 정렬하여 출력합니다.
출력 열 헤더는 각각 Doctor, Professor, Singer, Actor여야 합니다.
참고: 직업에 해당하는 이름이 더이상 없으면 NULL을 출력합니다.
행을 열로 바꾸는 문제입니다.
풀이
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
;
결과
반응형
'SQL' 카테고리의 다른 글
[프로그래머스] SQL 고득점 Kit : JOIN 풀이 (Oracle) (0) | 2021.03.31 |
---|---|
[HackerRank] Print Prime Number 풀이 (Oracle) (0) | 2021.03.18 |
[HackerRank] Binary Tree Nodes 풀이 (Oracle) (0) | 2021.03.16 |
[HackerRank] Weather Observation Station 20 풀이 (Oracle) (0) | 2021.03.15 |
[HackerRank] Interviews 풀이 (Oracle) (0) | 2021.03.10 |
[HackerRank] 15 Days of Learning SQL 풀이 (Oracle) (0) | 2021.02.27 |
[HackerRank] Weather Observation Station 5 풀이 (Oracle) (0) | 2021.02.26 |
댓글