오늘은 group by 데이, 기본적인건 괜찮았지만 groupy by 에 두 기준을 넣어야 하면 조금 헷갈렸었다. 이 문제는 시험 전 groupby 문제를 대비하기 위한 문제이다.
문제는
저자별, 카테고리별 매출 합계를 구하라.
였다.
처음에는 단순히 저자별로 묶으면 되는 줄 알았다.
GROUP BY AUTHOR_ID
그런데 결과가 원하는 형태가 나오지 않았다.
왜일까?
GROUP BY 이전의 데이터
JOIN과 WHERE가 끝나면 데이터는 이런 형태가 된다.
저자카테고리가격판매량매출
| 김작가 | 소설 | 10000 | 5 | 50000 |
| 김작가 | 소설 | 10000 | 3 | 30000 |
| 김작가 | 경제 | 20000 | 2 | 40000 |
| 이작가 | 소설 | 15000 | 4 | 60000 |
여기서 GROUP BY가 어떤 역할을 하는지를 이해하는 것이 핵심이었다.
GROUP BY 하나
GROUP BY AUTHOR_ID
이 뜻은
저자가 같은 데이터끼리 하나의 그룹으로 묶는다.
그러면 김작가의 데이터는
김작가
├── 소설
├── 소설
└── 경제
이렇게 세 줄이 하나가 된다.
결국 결과는
저자총 매출
| 김작가 | 120000 |
| 이작가 | 60000 |
이 된다.
문제는 여기서 카테고리 정보가 사라진다.
김작가는
- 소설도 있고
- 경제도 있기 때문에
SQL 입장에서는
"카테고리를 무엇으로 출력해야 하지?"
를 알 수 없다.
그래서 GROUP BY AUTHOR_ID만으로는 이 문제를 해결할 수 없다.
GROUP BY 두 개
이번에는
GROUP BY AUTHOR_ID, CATEGORY
를 사용한다.
이 뜻은
저자도 같고, 카테고리도 같은 데이터끼리 묶는다.
그러면 김작가의 데이터는
김작가
├── 소설
│ ├── 50000
│ └── 30000
└── 경제
└── 40000
이렇게 다시 나뉜다.
결과는
저자카테고리총 매출
| 김작가 | 경제 | 40000 |
| 김작가 | 소설 | 80000 |
| 이작가 | 소설 | 60000 |
바로 문제에서 원하는 결과가 된다.
내가 이해한 GROUP BY
"어떤 기준으로 데이터를 묶을 것인가?"
를 정하는 문법이라는 생각이 더 맞는 것 같다.
그리고
GROUP BY A, B
는
A로 묶은 뒤
그 안에서
B로 다시 묶는다고 이해하니 훨씬 쉽게 느껴졌다.
즉,
AUTHOR
├── 경제
├── 소설
└── IT
이런 트리를 만드는 과정이라고 생각하면 된다.
앞으로 GROUP BY를 사용할 때 생각할 것
문제를 보면 SQL부터 작성하지 말고 먼저 다음 질문을 해보려고 한다.
- 무엇을 기준으로 묶어야 하는가?
- 합계를 구하려는 대상은 무엇인가?
- 그룹 안에서 또 구분해야 하는 기준이 있는가?
이 세 가지를 먼저 생각하면 GROUP BY에 어떤 컬럼이 들어가야 하는지 훨씬 쉽게 결정할 수 있을 것 같다.
'프로그래밍 > 코딩 테스트, 더 이상 미룰 수 없다' 카테고리의 다른 글
| [코딩 테스트, 더 이상 미룰 수 없다] 코테 오답노트(1) (0) | 2026.06.30 |
|---|---|
| [코딩 테스트, 더 이상 미룰 수 없다] 프로그래머스lv3 베스트앨범 - 시험 전 복습용: Dictionary + Lambda 정렬 활용 문제 (0) | 2026.06.28 |
| [코딩 테스트, 더 이상 미룰 수 없다] 프로그래머스 Lv1 실패율 - Python의 매력, Dictionary와 정렬의 자유도 (0) | 2026.06.27 |
| [코딩 테스트, 더 이상 미룰 수 없다] 프로그래머스 lv1 키패드 누르기 - B/DFS와 좌표 계산 분리해서 유형좁히기 (0) | 2026.06.27 |
| [코딩 테스트, 더 이상 미룰 수 없다] 프로그래머스lv1.신규 아이디 추천 -Python 문자열 정복하기 (0) | 2026.06.27 |