• 카테고리

    질문 & 답변
  • 세부 분야

    데이터 분석

  • 해결 여부

    미해결

MIN 관련 질문이 있어요!

22.07.02 22:28 작성 조회수 100

0

안녕하세요:) 강의 잘 듣고 있어요

현 게시판에 이미 게시되어있는 MIN에 관한 질문이 있어서 이렇게 글을 남겨요.

피봇팅을 할때 마지막에 MIN을 붙여서 쿼리를 완성하셨는데, 

그렇다면 만약에 MIN을 붙이지 않아도 되는 건가요?

 

MIN을 안 붙이고 했는데 오류가 뜨더라고요. 이 부분에 대해 설명해주시면 감사드릴게요!

 

SELECT CASE WHEN Occupation = 'Doctor' THEN Name Else Null END

     , CASE WHEN Occupation = 'Professor' THEN Name Else Null END

     , CASE WHEN Occupation = 'Singer' THEN Name Else Null END

     , CASE WHEN Occupation = 'Actor' THEN Name Else Null END

FROM (

        SELECT occupation

             , name

             , ROW_NUMBER() over (PARTITION BY Occupation ORDER BY Name) rn

        FROM Occupations

     ) AS a

GROUP BY rn

ORDER BY rn;

답변 1

답변을 작성해보세요.

0

피봇팅을 할 때는 MIN, MAX, AVG, SUM 등 집계 함수를 꼭 써 주셔야 합니다.

적어 주신 쿼리는 아래와 같은 Occupations 테이블의 row를 하나씩 체크하면서 4개의 컬럼 값을 채워 나갑니다.

첫 번째 row의 occupation은 doctor 이므로 첫 번째 컬럼에 name(samantha)가 들어가고, 나머지 컬럼에는 null이 들어갑니다.

두 번째 row의 occupation은 actor 이므로 네 번째 컬럼에 name(julia)가 들어가고, 나머지 컬럼에는 null이 들어갑니다.

이런 일을 마지막 row까지 반복하고 나면 아래와 같은 테이블이 만들어 집니다.

그런데 우리가 원하는 결과물은 이렇게 null로 구멍이 뚫린 모습이 아니라 rn 값 순으로 위에서부터 값이 채워진 테이블이죠. 

그래서 rn을 기준으로 그룹을 묶어 그 그룹 내에서 집계를 하는 것입니다.

유일한 이름(ex- samantha)와 null들 사이에서 MIN, MAX, AVG, SUM 등 어떤 집계를 하든 답은 유일한 이름 값으로 나오기 때문에 꼭 MIN이 아니어도 됩니다.