Home » SQL » BASIC » sql group by 절을 알아보고 예제도 같이 풀어봅시다

sql group by 절을 알아보고 예제도 같이 풀어봅시다

안녕하세요. SQL 기본 시리즈 중 3번째 글입니다. 이번 시간에는 sql group by 절로 결과를 집계해서 가공하는 방법을 알아보겠습니다.

  • from 절과 카티션 곱에 대해 알아봅시다. 링크
  • order by 절에 대해 알아봅시다. 링크
  • group by 절에 대해 알아봅시다. [현재글]
  • having 절에 대해 알아보고 where 절과의 차이점을 알아봅시다. 링크
  • select 절과 as 절에 대해 알아봅시다. 링크

sql group by 절에 대한 이해

먼저 해당 구문은 특정 컬럼을 기준으로 그룹화를 한 다음, 그룹화된 대상에서 집계 함수를 쓰게 됩니다.

group by column1, …

select column1, … , aggreation_function

예를 들어, 부서별로 사람의 수를 구한다고 해 봅시다. 그러면

  • 부서별로 구한 거니까 집계 기준은 부서겠네요.
    • 그룹을 했는데, 무엇에 의해서 된 건가요? 부서명
    • group by 부서명
  • 다음, 그룹만 하면 의미가 없겠지요? 집계를 해야죠. 사람 수 구하래요.
    • count 하면 되겠군요.

상황 이해가 가시나요? 우리는 부서명을 기준으로 나눴고, 집계 함수로 count를 쓴 거에요.

사원 테이블이 요래 있다고 해 보겠습니다. 우리는 부서별 직원 수를 구할 거에요. 나누는 기준이 뭐라 했나요? 부서명이지요? group by 부서명을 하면, 아래와 같이 나누어 집니다.

오. 일단 나눠 놓았군요. 그런데 이렇게 하기만 하면 무엇을 하나요? 아무 의미 없다. 그렇죠? 집계를 해야 겠지요? 저는 각 부서별로 집계를 하고 싶기 때문에, count 함수를 쓰면 됩니다.

이제 count 함수에 의해, 그룹화된 결과들이 가공됩니다. 여기까지 흐름 정리합니다.

  • 특정한 기준으로 grouping을 합니다. group by 절 뒤에 오겠지요.
  • 이 group이 된 것들을 집계 함수로 가공합니다.

데이터 세팅

[그림 1] book 테이블 필드

먼저, book 테이블의 필드를 봅시다, title, id, author_id, type으로 되어 있어요. 여기서 type은 장르를 의미합니다.

[그림 2] book 테이블의 레코드

이제 레코드들을 보겠습니다. 장르가 math인 것이 3개, computer, poet인 것이 각각 하나씩 있습니다. 이것을 가지고 몇 가지 예제를 풀어봅시다.


group by 첫 번째 예제

먼저, 각 장르별로 책이 몇 권씩 있는지 출력해 보겠습니다.

  • 장르별로 처리해야 합니다. 따라서 group by type이 되겠네요.
  • 책이 몇 권씩 있는지. 이는 count를 써야 함을 의미합니다.

고로, 아래와 같은 쿼리를 입력하면 됩니다.

[그림 3] 1번 쿼리

보면, group by에 type을 적었습니다. 다음에, 집계 함수로 count를 사용했어요. 하나 중요한 것은 select 절에 type이 들어갔다는 점인데요. 집계 기준이 되는 컬럼까지 출력했기 때문입니다. 이게 없어도 실행이 되는데 문제는 없습니다. 그런데 어색한 용법입니다.

[그림 4] 1번 쿼리의 결과

결과는 위와 같습니다. math가 3, poet와 computer가 각각 1개씩 나오게 됩니다.


또 다른 예제

이제 작가별로 몇 종류의 장르의 책을 썼는지 알아봅시다. 단계별로 접근해 봅시다. 일단 작가별로 나누는 것은 별로 어렵지 않아요. group by author_id 까지는 문제 없습니다.

문제는, 여기서 중복되는 type을 제거해야 하는 것인데요. distinct는 중복되는 결과를 제거합니다. 고로, count를 적용하기 전에 distinct를 적용합니다.

그러면 중복 결과가 제거되어, author_id가 7인 결과는 3개에서 2개로 됩니다. 이제, count를 적용하면 되겠지요.

[그림 5] 2번 쿼리

위에서 말한 부분을 쿼리로 옮겼습니다 결과는 어떻게 나올까요?

[그림 6] 2번 쿼리의 결과

1번과 7번 작가가 2 종류의 장르의 책을 썼다는 결과가 나오게 됩니다. 이 글에서는 count만 썼는데요. 다른 집계 함수를 더 알고 싶으시다면 이 를 참고해 보셔도 좋겠습니다. 생각보다 sum, avg, rank 등은 많이 쓰니 알아두시면 좋겠습니다.

Leave a Comment

7 + 13 =