SQL - pivot, 그룹별 순위(case when)
https://www.hackerrank.com/challenges/occupations/problem
➡️ 해커랭크 문제
https://techblog-history-younghunjo1.tistory.com/159
➡️ 참고한 블로그
sql로 서브쿼리 정도는 만들어봤어도 좀 더 상위 호환 느낌인 피벗테이블은 sql에서 만들어본 적이 없었는데, 오늘 이런 유형의 문제는 처음 접하게 되어서 많이 새롭고 당황스러웠지만, 그래도 이렇게 또 하나 배웠음에 의의를,,,✨
이왕 시작한김에, film
테이블 데이터를 가지고 좀 더 심화학습을 해보기로 했는데요.
저는 맥북 유저라 SQLGate 홈페이지에서 mysql을 다운/실행할 수가 없어서
밑져야 본전이라며 그냥 한번 접속해봤는데 접속이 됐습니다!ㅋㅋㅋ 와우🤭
역시 짬바가 좀 다져진걸까요~.~
(출처: https://m.blog.naver.com/sqlgate/221331409404)
이거 보고 평소 AWS database 접속하듯이 그대로 응용했더니 성공!!
반가운 Welcome to the MySQL~
입문자를 위한 샘플 제공 데이터 베이스라고 합니다.
23개의 테이블 중 오늘 사용할 것은 film
테이블입니다.
desc film;
어떻게 생겼는지 확인.
select * from film limit 5;
이 film 데이터로 해보고 싶은 것은,
G, PG, R 등으로 나타난 영화 등급(rating
)을 각각의 열로 구분해서, 즉 피벗테이블을 만들어서 각 등급별 대여료(release_year
)가 높은 순서대로 영화제목(title
)을 출력하는 것입니다.
- n번째 행에는 그 등급에서 n번째로 대여료가 높은 영화가 출력되도록 합니다.
- 대여료가 같을 때는 알파벳 순으로 출력하며, null값은 0으로 대체합니다.
먼저 각 등급별 index 수를 세기 위해 변수를 설정해줍니다.
set @r1=0, @r2=0, @r3=0, @r4=0, @r5=0;
이것을 mysql에서 구현하기 위해 case when 문을 사용하였습니다.
CASE WHEN 조건 THEN '반환값' ELSE 'WHEN 조건에 해당하지 않을 때 반환 값' END
select max(G) as 'G', max(PG) as 'PG', max(PG_13) as 'PG-13', max(R) as 'R',max(NC_17) as 'NC-17'
from (select case when rating = 'G' Then title else 0 END AS G,
case when rating ='PG' then title else 0 END as PG,
case when rating = 'PG-13' then title else 0 END as PG_13,
case when rating = 'R' then title else 0 END as R,
case when rating = 'NC-17' then title else 0 END as NC_17,
case when rating = 'G' then (@r1:=@r1+1)
when rating = 'PG' then (@r2:=@r2+1)
when rating = 'PG-13' then (@r3:=@r3+1)
when rating = 'R' then (@r4:=@r4+1)
when rating = 'NC-17' then (@r5:=@r5+1)
END as RowNumber
from film
order by rental_rate desc, title) sub
group by RowNumber;
from절의 서브쿼리에서 case-when 문을 이용해 로우넘버가 추가된 테이블을 만들고 대여료(내림차순)와 제목 순으로 정렬하여 출력하였습니다.
얼핏봐선 알파벳순 정렬과 비슷해보여 대여료 순으로 정렬된 것인지 확인해보았습니다.
맞는 것 같습니다ㅋㅋㅋ
휴,,, sql의 세계도 참으로 넓고 깊네요...!
그래도 판다스로만 만들어봤던 피벗테이블을 sql로 만들어보니 신기하고, 뿌듯합니다.
할 줄 아는 것이 하나 늘었습니다🤓👍
Author And Source
이 문제에 관하여(SQL - pivot, 그룹별 순위(case when)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@hangnii/SQL-pivot-case-when저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)