# GROUP BY

특정 데이터로 집계하고 싶은 경우 GROUP BY를 사용합니다

일반적으로 WHERE 문 아래에 위치하며, 집계한 컬럼을 SELECT 절에도 작성해줘야 합니다. 여러 컬럼을 GROUP BY 할 수 있습니다

  • 문법 : GROUP BY 집계할-컬럼

# 집계

집계는 특정 값 기준으로 데이터를 묶는 것을 의미합니다

예를 들어 아래와 같이 데이터가 존재한다고 가정하겠습니다.

user_id event date_kr
1 signup 2021-04-01
2 signup 2021-04-01
3 page_view 2021-04-02

위 데이터를 일자별(date_kr)로 집계하면서 user_id 갯수를 COUNT합니다

SELECT
  date_kr,
  COUNT(user_id) AS cnt
FROM
  event_log
ORDER BY
  date_kr

결과는 다음과 같습니다

date_kr cnt
2021-04-01 2
2021-04-02 1

TIP

GROUP BY에 오는 컬럼은 SELECT 절에 집계 함수 외에 컬럼을 작성해주시면 됩니다

아래 예시에서 col_a, col_b를 선택하며 COUNT(col_a)하므로, GROUP BY에도 col_a, col_b를 명시합니다

SELECT
  col_a, 
  col_b, 
  COUNT(col_a) AS col_a_cnt
FROM Table
GROUP BY 
  col_a, 
  col_b

SELECT에서 집계할 컬럼을 입력하지 않는 경우 어떤 일이 발생하는지 쿼리를 실행해서 확인해보시는 것을 추천합니다

SELECT
  COUNT(col_a) AS col_a_cnt
FROM Table
GROUP BY 
  col_a, col_b


# 집계 함수

  • Aggregation Function

GROUP BY는 보통 집계 함수와 같이 사용합니다

집계 함수는 다양한 함수가 존재합니다. 특정 데이터를 기준으로 데이터를 모읍니다.

  • COUNT : 특정 데이터를 기준으로 데이터가 몇 개 있는지 세고 싶은 경우
  • COUNTIF : 특정 조건만 COUNT하는 경우
  • AVG : 평균 값을 구하는 경우
  • SUM : 값을 더하는 경우
  • MAX : 최대값 구하기
  • MIN : 최소값 구하기

그 외의 집계 함수는 링크 (opens new window)에서 확인할 수 있습니다

TIP

집계 함수를 사용하지 않고 중복을 제거할 경우에도 GROUP BY를 사용할 수 있습니다. 또는 DISTINCT를 사용할 수도 있습니다



# GROUP BY의 위치

  • GROUP BY는 보통 WHERE 아래에 위치합니다. WHERE 절이 없는 경우 FROM 아래에 위치합니다
SELECT
  col1, 
  COUNT(col1) AS col1_cnt
FROM Table
WHERE <조건문>
GROUP BY 
  col1