Query 문법 일곱 번째 where 절 이후 옵션 중 데이터를 그룹화하는 Group By 에 대해서 알려드리겠습니다.
SELECT 컬럼명 [WHERE 조건식] [Group By 컬럼(열)]
위키백과의 Group By절 설명문입니다.
GROUP BY 절은 그룹화 열 또는 컬럼명을 포함하는 식을 지정한다. 컬럼 별명은 사용할 수 없다. 또한 SELECT 문에서 GROUP BY 절에서 그룹 함수를 제외하고 그룹화되지 않은 열이 존재하면 함께 작성해야 한다.
간단하게 설명드리자면, 특정 열의 데이터를 기준으로 그룹으로 묶을 때 사용합니다.
1. 그룹 묶기 Grder By (열)
예시 데이터는 2019년 미쉐린 가이드 서울에서 별점 1점~3점을 받은 레스토랑 26곳의 테이블입니다.
지역(C열)으로 그룹을 묶은 뒤, 각 지역에 속하는 레스토랑(A열)의 개수를 세고 싶은 경우,
QUERY: select C, count(A) group by C
샘플 스프레드시트: [QUERY] Group by > group by 예시1
별점(B열)으로 그룹을 묶은 뒤, 각 지역에 속하는 레스토랑(A열)의 개수를 세고 싶은 경우,
QUERY: select B, count(A) group by B
샘플 스프레드시트: [QUERY] Group by > group by 예시2
2. Group by 중요 포인트
- 그룹으로 묶을 열은 데이터의 종류가 적은 열을 선택합니다.
예시로 사용한 2019년 미쉐린 가이드 서울 데이터를 보시면 레스토랑(A열) 데이터는 모두 다르기때문에 그룹으로 묶을 수 없습니다. 3종류만 있는 별점(B열)이나, 9종류만 있는 지역(C열)이 그룹으로 묶기에 적절한 데이터입니다.
- 그룹으로 묶은 데이터는 그대로 Select 가능, 그외 데이터는 함수 계산만 가능합니다.
예시의 select 문을 보시면 group by 로 그룹으로 지정한 열 B나 C는 그대로 select 했습니다. 하지만 그룹으로 지정하지 않은 열 A는 개수를 세는 count( )라는 함수를 사용하였습니다.
select B, count(A) group by B
select C, count(A) group by C
지역(C열)으로 그룹을 묶었을 때, 지역 데이터가 ‘강남구’인 레스토랑은 11개나 되기 때문에 A열은 그대로 표시할 수 없습니다. 여러 개의 데이터를 함수를 통해 계산된 데이터만 표시할 수 있습니다.
하지만 함수라고 해서 어렵게 생각하지 않으셔도 괜찮습니다. 스프레드시트에서 사용되는 가장 기본적인 5가지 함수들입니다.
- 평균: avg( )
- 갯수: count( )
- 최대치: max( )
- 최소치: min( )
- 합계: sum( )
자세한 내용은 Query Language Reference > Aggregation Functions 에서 확인할 수 있습니다.
다양한 함수를 사용한 다른 QUERY 예시를 보여드리겠습니다.
예시 데이터는 2019년 개봉한 애니메이션 3작품의 일일박스오피스 데이터입니다.
- 주먹왕 랄프 2: 인터넷 속으로
- 드래곤 길들이기 3
- 토이 스토리 4
박스오피스 데이터 중 일부를 준비했습니다.
- A열 날짜
- B열 순위
- C열 영화명
- D열 개봉일
- E열 매출액
- F열 관객수
샘플 스프레드시트: [QUERY] Group by > data 애니메이션 영화
QUERY: select C, min(D), count(A), sum(F), sum(E) group by C
- group by C : C열 영화명으로 그룹 묶기
- min(D) : D열 개봉일 데이터 최소치로 각 영화의 개봉일을 계산
- count(A) : A열 날짜의 갯수로 영화의 상영일수를 계산
- sum(F) : F열 관객수 데이터의 합계로 누적 관객수를 계산
- sum(E) : E열 매출액 데이터의 합계로 누적 매출액을 계산
샘플 스프레드시트: [QUERY] Group by > group by 예시3
참고로, Group by로 만든 결과는 피봇 테이블로도 동일한 결과를 만들 수 있습니다.샘플 스프레드시트: [QUERY] Group by > 피봇 테이블 예시
구글 스프레드 시트를 업무에 활용하고자 공부중에 님의 블로그를 알게 되었네요. 정말 정리를 잘 해놓으셔서 많은 도움이 됩니다.
종종 방문하여 공부하겠습니다.
감사합니다.
좋아요좋아요
GROUP BY 를 했는데, 0이 나오는 경우는 어떻게 하면 없앨 수 있을까요?
좋아요좋아요
안타깝게도 방법이 없습니다. 함수로 계산된 값에는 조건을 지정할 수 없습니다.
대신 Order by를 사용하면 함수로 계산된 값을 오름차순이나 내림차순으로 정렬 할 수는 있습니다.
아래 페이지를 참고하시기 바랍니다.
스프레드시트 Query 문법 (6) Order By, limit
https://smartagent.blog/2019/08/28/order_by_limit/
좋아요좋아요