SQL 집계함수 도대체 어디에 어떤 상황에 사용할까?
SQL로 사칙연산도 할 수 있다고 한다. 사칙연산이 끝나고 나서 SQL 집계함수를 배운다. 집계함수 말이 너무 어렵다. 도대체 무엇이 집계함수란 말인가. 공부를 하면 할 수록 이런 함수를 쓰는 것은 알겠는데 실무에서는 도대체 어떤 상황에 쓸까 라는 생각이 떠나지 않았다.
SQL 집계함수 무엇을 의미하나?

처음에 집계함수라고 들었을 때, 감이 잘 오지 않았다. 영어로는 Aggregate Function이라고 하는데 일단 외워두자. 코딩 테스트 칠 때 영어로 문제가 나올 수도 있으니 영어 단어도 익숙해 지면 좋을 것 같다.
그냥 이런 것들 이다.
- COUNT() : 개수 세기
- SUM() : 합계
- AVG() : 평균
- MIN() : 최소값
- MAX() : 최대값
예를 들어 엑셀이나 구글 스프레드시트에 데이터를 막 띄어 놓고 본다고 치자. 일단 많은 숫자들이 눈에 들어오지만, 이 데이터가 무엇을 의미하는 지 알기 쉽지는 않다. 이럴 때 이러한 데이터를 모아 의미가 있는 정보나 통계치를 만드는 함수를 SQL 집계함수라 한다.
SQL 집계함수 어떻게 사용될까?

고등학교 1학년 학생들의 키를 모아놓은 데이터가 있다고 하자. 그냥 많은 숫자들이 보인다. 하지만 이 데이터의 평균을 구하면 이 고등학교 1학년 학생들의 평균키를 알게 된다. 즉 의미 있는 정보가 되는 것이다.
‘아, 이 학교 1학년은 이 정도 되는 구나, 2학년 때는 더 커지나, 커진다면 얼마나 커질까, 성장률은 얼마나 될까?’ 이런 의미 있는 정보가 만들어 진다. 이럴 때 SQL 집계 함수가 쓰인다.
비즈니스를 하면 매출액, 고객의 평균 쓰는 돈, 가장 매출액이 높은 지점 아니면 낮은 지점 그리고 그 값은 얼마인지 등 생각해 보면 안 쓰는 게 더 이상할 정도이다.
SQL 집계 함수 사용 방법
처음 배울 때에는 SELECT COUNT(*) 이런 식으로 SELECT 뒤에 많이 위치되어 나온다. 하지만 나중에 더 공부를 하니, 위치는 꼭 SELECT 뒤에 국한되지는 않았다.
SELECT COUNT(*)
FROM A
WHERE total_sales >= 100
A 테이블에 있는 total_sales 컬럼의 데이터 값이 100이상이 되는 데이터 개수를 표현해 달라는 요청이다.
그리고 집계함수() 괄호안에는 컬럼만 들어가는 것은 아니다. 조건이 들어갈 수도 있다. 예를 들어 이런 조건이 되는 데이터 개수를 구하라 라던가, 이런 조건이 되는 데이터 값의 합계를 구하라는 던가 말이다.
나는 문제를 볼 때, 기존의 풀었던 문제 구문에 너무 집착한 나머지, 응용적으로 사용해 볼 생각을 못해서 문제를 많이 틀렸다. 문제 풀이를 볼 때면 ‘아 이렇게도 사용할 수 있구나!’라는 생각을 하면서 사용 방법의 확장의 중요성을 깨닫는다.
집계 함수에서 내가 헷갈렸던 부분
COUNT(*), COUNT(컬럼)이 NULL 값의 존재 여부에 따라 다를 수 있다는 점이다. 내 눈에는 같아 보였지만, 실행한 값은 너무나 달랐다. 그래서 문제를 틀리곤 했다.
- COUNT(*) : NULL 값까지 다 센다
- COUNT(컬럼) : NULL 값은 제외
여기서 NULL 값은 데이터가 없는 것을 의미한다. 0이 아니다. 엑셀 파일 한번씩 보다 보면 빈 칸으로 비워져 있는 것을 볼 때가 있는데 그게 바로 NULL이다.
예를 들어 Monkey 컬럼에서 COUNT(monkey) 실행했을 때, COUNT(*)은 이 컬럼이 비워져 있던, 채워져 있던 간에 모든 행을 카운트 하지만, COUNT(monkey) 는 비워져 있는 칸은 카운트 하지 않는다.
이게 왜 중요하다면 SQL 집계함수로 문제를 풀고 났을 때 결과 수치에서 약간의 차이를 발견할 때가 있는데 이런 부분이 꼭 문제가 되곤 한다.
마무리
오늘은 SQL 집계함수에는 어떤 것들이 있고 어떠한 상황에 쓰이며, 어떻게 쿼리를 짤 수 있는 지 알아보았다. SQL 배울 때 초반에 나와서 그냥 쉽게 생각하고 지나쳤는데, 문제를 풀 때 생각보다 다른 절이랑 함께 사용하는 경우가 많아서 이 포스팅에 정리를 해 보았다.
더불어 SQL 기본 절이 궁금하신 분들은 아래 포스팅에서 확인하실 수 있으니, 꼭 읽어 보시기 바랍니다. 이것 모르고는 SQL 공부 시작을 할 수 없다고 생각한다. 혹시 AI가 다 해줄 수 있지만 이 정도는 알아야 AI가 제대로 했는 지 확인이 가능하다고 생각한다.
