본 포스트에서는 조회한 데이터를 사용자가 가공하여 원하는 조건에 맞춰 묶어주는 GROUP BY에 대해서 살펴볼 것이다. 우리말로는 "~별로" 와 같은 표현을 사용할 때 이용하기 좋다.
GROUP BY
01 GROUP BY 란
GROUP BY [그룹바이]는 이름에서 알 수 있듯이 데이터를 그룹핑/ 묶어주는 기능을 한다. 작동 방식은 크게 두 가지로 나눠 생각해 볼 수 있다. 컬럼 자신에 대한 그룹핑과 다른 칼럼의 값을 한 칼럼을 기준으로 그룹핑하는 방식이다. 그룹핑의 대상은 "~별로"의 ~에 해당하는 것이다.
EXAMPLE
- 연도 별로 : GOUPE BY YEAR
- 나이 별로 : GROUP BY AGE
- 국가 별로 : GROUP BY COUNTRY
SQL은 다음과 같이 작성된다.
SELECT YEAR, COUNTRY
FROM TABLE
GROUP BY YEAR
;
GROUP BY절은 FROM 이후에 작성된다.
02 GOUPE BY 자기자신 : 자신에 대한 그룹핑
자기자신에 대해서 GROUP BY를 사용한다면 중복을 제거하는 효과가 나타난다.
EXAMPLE
나이를 나이별로 보여주세요.
SELECT AGE
FROM TABLE
GROUP BY AGE
;
자기 자신을 자기 자신별로 추출하니 중복이 제거된 리스트를 결과값으로 얻을 수 있다. 이런 기능은 DISTINCT를 이용해서 간단히 얻을 수 있으니 잘 사용하는 쿼리문은 아니다.
03 GROUP BY 기준 : 기준에 대한 그룹핑
다른 한 칼럼에 대해서 GROUP BY를 사용한다면 기준 컬럼의 중복은 없어지고 각 값 별로 소계값들을 보여준다. 소계를 위해선 기준 칼럼 외에 다른 칼럼은 함수를 사용해 줘야 한다.
SELECT COL1, COUNT(COL2)
FROM TABLE
GROUP BY COL1
;
EXAMPLE
연도별 매출액을 보여주세요.
SELECT YARE, SUM(AMOUNT)
FROM SHOP
GROUP BY YEAR
;
04 GROUP BY 기준1 기준2 : 기준이 여러개일 때의 그룹핑
기준이 2개 이상일 경우가 있다. 그럴 경우엔 GROUP BY 절에 기준 컬럼들을 괄호에 묶어서 표현해 주면된다. (칼럼1, 칼럼2) 결과는 칼럼1과 칼럼2의 순서쌍이 같은 경우를 하나의 경우로 취한다. *괄호는 안써도 가능하다. 그렇지만 괄호로 써야 한다 설명한 이유는 그 조합이 순서쌍과 같기 때문이다.
SELECT COL1, COL2, SUM(COL3)
FROM TABLE
GROUP BY (COL1, COL2)
;
EXAMPLE
거주 도시와 출생연도 별로 몇명이 백신접종을 완료했는지 알려주세요.
SELECT CITY, BIRTH_YEAR, PERSON_ID
FROM VACCINATION
GROUP BY (CITY, BIRTH_YEAR)
;
'ICT > SQL' 카테고리의 다른 글
SQL 문법 | 데이터 조회 및 필터 | GROUPING SETS (0) | 2021.09.12 |
---|---|
SQL 문법 | 데이터 조회 및 필터 | HAVING (0) | 2021.09.11 |
SQL 문법 | NULL에 대해서 | NULL NVL NVL2 COALESCE NULLIF (0) | 2021.09.10 |
SQL 문법 | 주요 데이터 타입 (0) | 2021.09.09 |
SQL 문법 | 함수 | COUNT SUM AVG DISTINCT (0) | 2021.09.08 |
댓글