이번 글에서는 집계함수를 좀 더 내가 원하는 형태로 가공할 수 있는 방법인 GROUP BY에 대해 배워보려합니다. GROUP BY는 이름에서도 힌트를 얻을 수 있는 것처럼 말그대로 내가 원하는 값을 그룹화 해주는 절입니다. GROUP BY는 보통 집계함수와 많이 사용하기 때문에 집계함수에 이어 설명드리게 되었습니다.
GROUP BY는 같은 컬럼값을 가진 데이터들을 그룹화 해주는 기능을 가지고 있는데요. 그렇기 때문에 GROUP BY에는 내가 그룹핑을 하고싶은 컬럼명을 써주게 됩니다. 그럼 이제 어떻게 활용할 수 있는지 쉽게 예를 들어보겠습니다.
필기구 종류 | 제조사 | 구매일자 | 가격 |
볼펜 | 모나미 | 2023-12-01 | 1,000 |
연필 | 모나미 | 2023-12-01 | 500 |
지우개 | 모나미 | 2023-12-01 | 300 |
볼펜 | 제트스트림 | 2023-12-01 | 1,500 |
볼펜 | 제트스트림 | 2024-01-01 | 1,200 |
연필 | 모나미 | 2024-01-01 | 500 |
사인펜 | 모나미 | 2024-01-01 | 1,000 |
네임펜 | 모나미 | 2024-01-01 | 1,000 |
내 필통에 위와 같은 필기구들이 담겨있다고 생각해봅시다. 이때 나는 필통을 챙기지 않은 친구들에게 필기구를 빌려주기 위해 필기구들이 각각 몇개인지 셀 필요가 있습니다. 이럴 때 어떻게 쿼리문을 작성해야할까요? 우리는 지난글에서 개 수를 세는 함수로 count()라는 것을 배웠고 필기구의 종류별로 몇개인지 세어야하니 GROUP BY를 써야하는 것을 알고있으니 아래와 같이 작성할 수 있습니다.
SELECT count(*)
FROM 필통
GROUP BY 필기구 종류
이렇게 작성하면 우리가 원하는 값을 얻을 수 있지만 한가지 부족한 부분이 있습니다. 만약 우리가 위와같이 쿼리한다면 다음과 같은 결과값을 갖게 될거에요.
_col1 |
3 |
2 |
1 |
1 |
1 |
뭔가 나오긴했지만 어딘가 어색한 결과값이 도출되었습니다. 왜그럴까요? 쿼리의 결과값은 언제나 SELECT절에 요청한 값만 도출합니다. 자 요청사항을 다시한번 확인해볼까요?
- 요청사항: 어떤 필기구가 몇개
요청사항을 자세히 우리가 이 요청사항에서 알고싶은 값은 "어떤 필기구", "몇 개" 이렇게 두개라는 것을 확인할 수 있습니다. 그렇기 때문에 쿼리문은 다음과 같아져야겠지요.
SELECT 필기구 종류, count(*)
FROM 필통
GROUP BY 필기구 종류
필기구 종류 | _col1 |
볼펜 | 3 |
연필 | 2 |
지우개 | 1 |
사인펜 | 1 |
네임펜 | 1 |
이제야 말로 우리가 원하는대로 값을 얻었으니 친구들에게 "나 볼펜 3개 연필 2개 있어!" 라고 말할 수 있게 되었습니다. 참고로 GROUP BY는 여러게의 컬럼을 나열할 수 있습니다. 특히 필기구의 브랜드에 예민한 친구들도 있으니 필기구 종류, 제조사로 그룹핑하여 다시 세어보겠습니다.
SELECT 필기구 종류, 제조사, count(*)
FROM 필통
GROUP BY 필기구 종류, 제조사
필기구 종류 | 제조사 | _col1 |
볼펜 | 모나미 | 1 |
볼펜 | 제트스트림 | 2 |
연필 | 모나미 | 2 |
지우개 | 모나미 | 1 |
사인펜 | 모나미 | 1 |
네임펜 | 모나미 | 1 |
이렇게 GROUP BY 절을 활용한다면 우리가 원하는 그룹으로 집계한 결과값을 쉽게 확인할 수 있습니다. 어렵지 않죠? 마치 엑셀에서 피봇테이블을 만들 때, 열 칸에 컬럼명을 집어넣는것과 같습니다. 자 그럼 확실히 이해했는지 다음과 같은 요청사항을 쿼리문으로 작성해볼까요? 정답은 댓글에 달아둘테니 작성해보시고 댓글을 확인해보세요.
- 요청사항: 볼펜의 평균 구매금액을 제조사별로 확인하고 싶다.
자 그렇지만 우리가 계속 확인해본 결과값에는 _col1 이라는 요상한 친구가 계속 붙어있는 것을 확인할 수 있습니다. 요 친구는 우리가 이름을 정해주지 않았기 때문에 임의로 정해진 컬럼명인데요. 요것은 다음시간에 안내해드리겠습니다.
함께 성장해요.
'데이터분석' 카테고리의 다른 글
[SQL 기본] 요약정리_SELECT, FROM, WHERE (0) | 2024.01.29 |
---|---|
[SQL 기본] ORDER BY와 별칭(ALIAS) (0) | 2024.01.22 |
[SQL 기본] 집계 함수 (2) | 2024.01.08 |
[SQL 기본] 정말 쉬운 예시 (1) | 2023.12.22 |
[SQL 기본] SELECT, FROM, WHERE (0) | 2023.12.20 |