[MySQL] 데이터 집계

김재현·2022년 10월 13일
0

sql

목록 보기
8/12
post-thumbnail

깃허브 : TIL 저장소

MySQL 공부 내용을 깃허브 TIL 저장소에 정리를 해두었습니다. 이를 수행하고자 하는 작업을 기준으로 문법들을 다시 정리를 해보고자합니다. 이번 게시글에서는 테이블에서 데이터를 집계할 때 사용할 수 있는 문법을 정리해보았습니다.


1. 집계함수

FunctionDescription
COUNT총 갯수를 계산해주는 함수
SUM합계를 계산해주는 함수
AVG평균을 계산해주는 함수
MIN가장 작은 값을 찾아주는 함수
MAX가장 큰 값을 찾아주는 함수
FIRST첫번째 결과값을 리턴하는 함수
LAST마지막 결과값을 리턴하는 함수

데이터를 집계할 때 사용하는 집계함수(Aggregate Function)입니다. 이 중에서 몇가지 이야기 해볼만한 함수에 대해 정리르 해보고자 합니다.

  • AVG 함수
SELECT AVG(columnname)
FROM tablename

AVG 함수는 데이터에 NULL 값이 있으면 이를 무시하고 계산합니다. 그래서 총합을 NULL 값을 제외한 수로 나눕니다. 데이터 정합성 체크를 하고 NULL값이 없다면 상관이 없지만, 만약 있다면 다음의 방법을 사용해야 합니다.

SELECT SUM(columnname)/COUNT(*)
FROME tablename

COUNT(*)은 NULL 값을 포함한 전체 행의 수를 카운트해줍니다. NULL 값을 무시하지 않고 계산을 하기 위해서는 이와 같은 방법을 사용해야 합니다.

  • MIN / MAX 함수
SELECT MIN(날짜열)
     , MAX(날짜열)
FROM tablename

데이터타입이 날짜인 경우 MIN 함수를 사용하면 가장 처음의 시간의 데이터를 조회할 수 있습니다. 반대로 MAX 함수를 사용하면 가장 나중 시간의 데이터를 조회할 수 있습니다.


2. GROUP BY

SELECT column1
     , Aggregate_Functions(colunm2)
FROM table
WHERE condition
GROUP BY colunm1
ORDER BY colunm1, colunm2;

GROUP BY를 통해 그룹을 나누면, 집계함수의 활용범위를 넓힐 수 있습니다. 그리고 다음의 주의사항이 있습니다. GROUP BY로 그룹화 하지 않은 열은, 집계함수를 사용하지 않은 채 SELECT구에 기술할 수 없습니다. 그리고 그룹화한 열은 SELECT구에 포함되어야 합니다.

그리고 그룹화를 할 때 DISTINCT와 함께 사용할 수 있습니다. 하지만 이 경에는 ORDER BY구에서 정렬이 불가능 합니다.


3 HAVING

SELECT colunm1, colunm2
FROM table
WHERE condition
GROUP BY colunm1 
HAVING condition (with Aggregate_Functions)
ORDER BY colunm2; 

WHERE구로 행을 검색하는 처리는 GROUP BY로 그룹화 하는 처리보다 순서상 앞에 있습니다. 그래서 AS로 지정한 별칭은 WHERE구에서는 사용이 불가하다고 설명한 적이 있습니다.

이와 마찬가지 이유로 그룹화가 필요한 집계함수는 WHERE구에서 사용할 수 없습니다. 대신 우리는 HAVING구를 활용합니다. 집계함수를 사용할 경우 HAVING구로 검색조건을 지정할 수 있다는 것을 기억해두시길 바랍니다.

0개의 댓글