프로그래밍/코딩 테스트, 더 이상 미룰 수 없다

[코딩 테스트, 더 이상 미룰 수 없다] 프로그래머스 lv4 저자 카테고리별 매출 집계하기 - GROUP BY는 '묶는 기준'을 만든다.

d 0_0 b 2026. 6. 28. 21:23

 

오늘은 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에 어떤 컬럼이 들어가야 하는지 훨씬 쉽게 결정할 수 있을 것 같다.