MySQL 공부 내용을 깃허브 TIL 저장소에 정리를 해두었습니다. 이를 수행하고자 하는 작업을 기준으로 문법들을 다시 정리를 해보고자합니다. 이번 게시글에서는 테이블에서 데이터를 집계할 때 사용할 수 있는 문법을 정리해보았습니다.
Function | Description |
---|---|
COUNT | 총 갯수를 계산해주는 함수 |
SUM | 합계를 계산해주는 함수 |
AVG | 평균을 계산해주는 함수 |
MIN | 가장 작은 값을 찾아주는 함수 |
MAX | 가장 큰 값을 찾아주는 함수 |
FIRST | 첫번째 결과값을 리턴하는 함수 |
LAST | 마지막 결과값을 리턴하는 함수 |
데이터를 집계할 때 사용하는 집계함수(Aggregate Function)입니다. 이 중에서 몇가지 이야기 해볼만한 함수에 대해 정리르 해보고자 합니다.
SELECT AVG(columnname)
FROM tablename
AVG 함수는 데이터에 NULL 값이 있으면 이를 무시하고 계산합니다. 그래서 총합을 NULL 값을 제외한 수로 나눕니다. 데이터 정합성 체크를 하고 NULL값이 없다면 상관이 없지만, 만약 있다면 다음의 방법을 사용해야 합니다.
SELECT SUM(columnname)/COUNT(*)
FROME tablename
COUNT(*)은 NULL 값을 포함한 전체 행의 수를 카운트해줍니다. NULL 값을 무시하지 않고 계산을 하기 위해서는 이와 같은 방법을 사용해야 합니다.
SELECT MIN(날짜열)
, MAX(날짜열)
FROM tablename
데이터타입이 날짜인 경우 MIN 함수를 사용하면 가장 처음의 시간의 데이터를 조회할 수 있습니다. 반대로 MAX 함수를 사용하면 가장 나중 시간의 데이터를 조회할 수 있습니다.
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
구에서 정렬이 불가능 합니다.
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
구로 검색조건을 지정할 수 있다는 것을 기억해두시길 바랍니다.