본문 바로가기
데이터분석

[SQL 기본] 집계 함수

by 규랃 2024. 1. 8.
728x90
반응형

지난 글을 통해 SQL의 기본 구문인 SELECT, FROM, WHERE에 대해 확실하게 이해하는 시간이 되었습니다. 뿐만 아니라 마지막에 등장한 요청사항을 통해 우리가 공부한 것보다 더 많은 것이 필요하다는 것을 알게 되기도 했죠. 그렇다면 이번 글을 통해 우리가 원하는 데이터를 더욱 효율적으로 다룰 수 있는 집계함수에 대해 배워보도록 하겠습니다.

 

이 글을 보시는 분들 중에 SQL은 몰라도 집계함수에 대해 모르시는 분은 많이 없을 것이라고 생각합니다. 엑셀이나 스프레드시트에서 대시보드, 보고서 등을 작성하기 위해 집계함수를 많이 활용하고 계실 테니까요. 자 그럼 지난번 우리를 당황케 했던 요청내용을 다시 한번 확인해 봅시다.


  • 요청사항: “회계감사에 필요해서 작년부터 이번달까지 월별 매출 전달 부탁드립니다.” 
    • 값: 월별 매출 
    • 조건: 작년부터 이번달까지 
    • 어디서부터: “매출데이터니까 사용자(회원) 테이블이 아닌 매출 관련 테이블에 있겠다!” 
SELECT 월별 매출
FROM 매출 테이블
WHERE 매출일자 = 작년부터 이번달까지

 


우리는 지난 글에서 매출데이터가 월별로 집계되고 있지 않기 때문에 월별로 집계하는 방법을 몰라 당황한 기억이 있었죠. 그런데 만약 본인이 일하고 있는 조직의 매출테이블이 월별로 집계되어 있는 분석용 월별 매출 테이블이 따로 관리되고 있다면 복 받으신 겁니다. 앞으로 정말 편안한 분석생활을 시작하실 수 있을 거예요.

 

왜냐면 대부분의 조직에서는 월별데이터는커녕 일별데이터조차 말아두지 않고 원하는 사람이 집계함수를 통해 가공/추출을 하게끔 건별로 기록된 Raw Data(이후 로데이터) 형태로만 관리되고 있는 것이 현실이기 때문입니다. 

더보기

(1. 여기서 말아두다는 표현은 로데이터를 일별, 월별 혹은 다른 집계기준으로 데이터를 집계해 둔다를 의미합니다.)

(2. 이 내용을 보시고 “왜 우리는 월별 데이터가 없지? 엔지니어들이나 DA들이 일 대충 하는 거 아니야?”라고 생각하지 않으셨으면 좋겠습니다. 리소스, 우선순위, 데이터를 관리하는 기준 등에 따라 각 조직마다 처한 상황이 모두 다르기 때문에 무조건 월별 데이터가 있어야 좋다고 말할 수 없습니다. 여러분과 함께 일하는 엔지니어나 DA들은 그 상황에서 최선을 다해 최적의 환경을 만들기 위해 노력하고 계시니 부디 오해 없으셨으면 좋겠습니다.)

 

그렇기 때문에 건별로 기록된 매출데이터에서 집계함수를 활용해 내가 원하는 형태로 가공하는 절차가 필요합니다. 물론 전부 건별 로데이터를 다운받아서 엑셀에 집어넣고 피벗테이블을 돌리면 된다고 생각하실 수 있겠습니다만 용량이 큰 데이터를 엑셀로 다루다 보면 시간이 오래 걸릴 뿐 아니라 특정 행이 넘어가면 다룰 수 조차 없어서 집계함수를 한번 공부해 두면 빠르고 간편하게 집계된 데이터를 얻을 수 있습니다.

그럼 우리가 자주 활용하는 집계함수를 SQL에서는 어떻게 쓰는지 알아볼까요?   

  • 합: sum(원하는 값)
  • 평균: avg(원하는 값)
  • 최소: min(원하는 값)
  • 최대: max(원하는 값)
  • 개수: count(원하는 값)

자, 함수를 확인해 보니 많이 익숙하시죠? 대부분 엑셀에서 활용하는 함수들과 모양이 비슷한 것을 알 수 있습니다. 엑셀에서처럼 함수 괄호 안에 내가 집계를 원하는 값을 입력해 주면 됩니다. 집계함수는 말 그대로 내가 원하는 값을 집계하여 보여주는 함수이기 때문에 기본적으로는 SELECT 절에서 가장 많이 활용하게 됩니다.

 

그럼 다음 쿼리문을 통해 어떤 것을 추출하는 쿼리인지 함께 확인해 봅시다. 아래 테이블을 기준으로 답을 생각해 보시고 댓글에 기록해 둔 답과 비교해 보세요.

  • 합: sum() 
SELECT sum(주문금액) 
FROM 매출 테이블 
WHERE 매출일자 = 작년부터 이번달까지
  • 평균: avg() 
SELECT avg(주문금액) 
FROM 매출 테이블 
WHERE 매출일자 = 작년부터 이번달까지
  • 최소: min()
SELECT min(주문금액) 
FROM 매출 테이블 
WHERE 매출일자 = 작년부터 이번달까지
  • 최대: max() 
SELECT max(주문금액) 
FROM 매출 테이블 
WHERE 매출일자 = 작년부터 이번달까지
  • 개수: count() 
SELECT count(주문금액) 
FROM 매출 테이블 
WHERE 매출일자 = 작년부터 이번달까지

 

사실 집계함수는 엑셀에서도 많이 다루는 것이다 보니 이해가 쉽게 되셨으리라 생각합니다. 하지만 우리는 여전히 우리를 당황케 한 요청사항에서 나왔던 월별집계를 해결하지 못했습니다. 다음 글에서는 내가 원하는 그룹별로 나눠 집계할 수 있는 방법에 대해서 알아볼 예정이오니 많은 관심 부탁드립니다.

 

함께 성장해요.

 

728x90
반응형