• 카테고리

    질문 & 답변
  • 세부 분야

    데이터 분석

  • 해결 여부

    해결됨

피봇 테이블 질문이있습니다

24.04.06 15:23 작성 조회수 70

0

SQL 쿼리의 데이터 처리 순서가 쿼리문 순서대로 진행된다고 이해하고 있었는데 GROUP BY 가 등장하면서 너무 헷갈리네요..

(GROUP BY 를 하지 않은 SQL 쿼리문)

SELECT id
  , SUM(CASE WHEN month = 'Jan' THEN revenue ELSE NULL END) as Jan_Revenue
  , SUM(CASE WHEN month = 'Feb' THEN revenue ELSE NULL END) as Feb_Revenue
  , ...

FROM department;

 

위 SQL 을 실행해보면 row 가 하나밖에 없는 출력이 나오더라구요 (ID 가 1인)

| id | Jan_Revenue | Feb_Revenue | Mar_Revenue | Apr_Revenue | May_Revenue | Jun_Revenue | Jul_Revenue | Aug_Revenue | Sep_Revenue | Oct_Revenue | Nov_Revenue | Dec_Revenue |
| -- | ----------- | ----------- | ----------- | ----------- | ----------- | ----------- | ----------- | ----------- | ----------- | ----------- | ----------- | ----------- |
| 1  | 17000       | 17000       | 6000        | null        | null        | null        | null        | null        | null        | null        | null        | null        |

 

그런데 데이터 처리 순서상 해당 출력문으로 가지고 GROUP BY id 를 했을때 어떻게 id 가 1, 2, 3 모두 출력될 수 있는지 궁금합니다

답변 2

·

답변을 작성해보세요.

0

| id | revenue | month |
| -- | -------- | ------- |
| 1 | 8000 | Jan |
| 2 | 9000 | Jan |
| 3 | 10000 | Feb |
| 1 | 7000 | Feb |
| 1 | 6000 | Mar |

 

이 문제의 테이블 예시가 위와 같이 주어졌습니다.

여기서 group by id를 하지 않고 jan_revenue를 구하면 id가 무엇인지에 관계 없이 month='Jan'인 행의 revenue를 모두 더한 값을 반환합니다.
그래서 8000+9000 = 17000이 나옵니다.

 

group by id를 하면 id별로 집계를 하여 아래와 같은 컬럼을 가진 결과를 반환합니다.

| id | jan_revenue |
| -- | ------------ |
| 1 | 8000 | -> id = 1이고 month = 'Jan'인 행의 revenue 합
| 2 | 9000 | -> id = 2이고 month = 'Jan'인 행의 revenue 합
| 3 | 0 | -> id = 3이고 month = 'Jan'인 행의 revenue 합 (이런 행이 없으므로 결과가 0이 나옴)

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.04.08

안녕하세요, 인프런 AI 인턴입니다.

SQL 쿼리에서 GROUP BY 구문은 데이터를 특정 칼럼(들)의 값에 따라 그룹으로 묶기 위해 사용됩니다. 즉, 특정 칼럼의 각각의 값에 대해 집계 함수(SUM, COUNT 등)를 적용하여 결과를 얻을 수 있습니다.

GROUP BY 구문이 사용되지 않은 경우에는, 집계 함수의 적용 범위가 전체 데이터로 간주되어 전체 데이터에 대한 한 줄의 결과를 반환합니다. 그렇기 때문에 제시하신 예시에서 ID가 1인 하나의 결과만 나타난 것이 아니라, 모든 데이터에 대해 집계 함수가 적용된 결과 하나가 반환된 것입니다.

허나, GROUP BY id를 사용하는 경우, 데이터는 id 칼럼의 값별로 그룹화되어 각 id 값에 대한 집계 함수의 결과가 별도로 계산됩니다. 이 경우, id가 1, 2, 3 등 각각의 값에 대해 각각의 집계(예: 월별 매출)가 계산되어 여러 행의 결과가 나올 수 있습니다.

즉, GROUP BY를 하지 않았을 때와 했을 때의 차이는 집계 함수를 적용하는 데이터의 범위가 전체 데이터에서 그룹별로 나뉘어 적용된다는 점입니다. 따라서 GROUP BY id를 사용하면 id 별로 데이터가 묶여 각각의 id에 대한 집계 결과를 별도로 얻게 되는 것입니다.