[SQL] HackerRank - Occupations

LOSSS·2021년 1월 13일
0

SQL

목록 보기
6/8
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

행과 열을 바꾸는 pivot 을 활용해야 한다.

select 에서 case when 앞에 max 를 쓰는 이유는

  • 맨 마지막에 group by 를 사용하기 위하여 -> 집계함수가 필요함
  • 없으면 null 로 처리하기 위하여

로 추정할 수 있겠다 🙃

마지막에 group by rn 이 빠지면 한 줄만 나온다
따라서 빼먹지 말고 꼭 써줘야 한다 !


> ✔ OVER (PARTITION BY ...)
  • 그룹 단위로 나누어 무언가를 해보겠다는 뜻
    위 코드에서는 row_number 를 name 순서대로 정렬된 occupation 별로 숫자를 매기겠다는 뜻이다.
  • 참고링크

0개의 댓글