해결된 질문
작성
·
211
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 인턴입니다.
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에 대한 집계 결과를 별도로 얻게 되는 것입니다.