본문 바로가기

열정가득한 개발자의 이야기/hacker Rank SQL 문제

Hacker Rank Advanced Select -> pivot 사용

 

저의 답안은 아래와 같습니다!

복사 붙여 넣기 못하시게 일부러 캡처로...ㅎㅎ..

한번 더 써보는 게 좋으니까요..!

 

중요 포인트 :

MAX는 Mysql에서 최댓값을 쓰이는 것도 있지만 집계함수, 문자열 데이터에서는 알파벳 순으로 가장 뒤에 오는 값을 의미한다고 합니다. 그러나 여기서는 그런 뜻이 아닌 그룹 내에서 조건에 맞는 단일 값을 반환하는 역할을 하는 것입니다!

 

- 처음 풀어보는 형식의 문제

mysql에서 pivot이 가능하다는 것을 처음 알았습니다. 

그래서 그런 게 있다는 것도 모르고 옆으로 나열해 보려고 기존 case when과 with을 사용해서 별 짓을 다했는데 해당하는 값들이 나열되는 것이 아닌 다른 행에 한 값씩만 들어가 있었어요.

예로 null null  alice null

        lee null null null 이런 식…

그래서… 내 친구 gpt와 함께.. 문제를 풀어보았습니다..ㅎㅎ……………..

근데.. 여전히 max(case when)이 부분이 이해가 가지 않았어요 

그래서 gpt를 구워삶아 가며 이해를 해보았습니다. 

 

먼저 from절부터 실행이 돼서 row_number로  직업별로 번호를 붙여줍니다. 

 

예시 테이블 

 

그다음, row_num로 그룹을 만들어 주고 (row_num 1번끼리 그룹핑)

그 이후에 max(case when) 구문을 실행합니다.  max가 최댓값을 가져오는 게 아니라 각 그룹에서 하나의 값을 선택하는 데 사용됩니다. 

여기서 그룹은 row_num = 1그룹, row_num = 2그룹 이런 식의 그룹을 칭합니다. 

그러니 저기 예시 테이블에서 1번 그룹들인 에밀리, 알렉스가 한 그룹으로 묶이는 거고, 그다음 2그룹인 존과 제인이 묶이고, 나머지는 사라와 null로 처리가 되는 겁니다.

 

후.. 이 문제와 비슷한 다른 문제에 직면하게 되면 제가 딱 여긴 피벗으로 해야 하니까 max를 써봐야지라고 생각을 할 수 있을까 의심이 되긴 합니다..

그래도 조오오금 이해가 가서.. 이렇게 정리까지 하게 되었네요

혹시 설명 중에 부족한 부분이 있다면 제발 알려주세요!! 같이 성장합시다아ㅏㅏ!!