ㅤAggregate Function을 그대로 번역하면 집계 함수이다. 집계란 통계와 비슷한 의미로, 주로 GROUP BY
와 함께 사용하여 그룹화를 해 주는 역할을 한다.
SUM( )
: 합계
AVG( )
: 평균
MIN( )
: 최솟값
MAX( )
: 최댓값
COUNT( )
: 특정 컬럼의 ROW 개수를 세고 싶을 때COUNT(특정 컬럼 이름)
을 사용한다.
💡 <해당 컬럼에 NULL이 있는 경우>
COUNT(특정 컬럼 이름)
을 이용하여 특정 컬럼 이름을 명시하고 세면
➡ NULL을 무시하고 카운팅
COUNT( )
를 이용하여 해당 컬럼 전부를 세면
➡ NULL을 포함하여 카운팅
ㅤGROUP BY
는 ROW들을 그룹으로 묶어 주는 역할을 하여 속성 값이 같은 데이터들끼리 그룹을 만들 수 있다. 이렇게 GROUP BY
로 묶은 그룹은 반드시 SELECT
에서 포함 을 시켜 주어야 한다.
국가코드별로 그룹을 묶고, 그 그룹에 해당하는 도시들의 인구수를 sum()을 이용해 모두 더한 결과
➕
GROUP BY
로 묶고 그 데이터 그룹의 조건을 설정하려면 HAVING 조건식
을 작성해야 한다.
예시 1
예시 2
예시 3
회원 id별 총 구매 개수를 구하려 하는 경우
집계함수를 사용하지 않고 실행하니 GROUP BY 쿼리 결과가 이상하게 나온다.
이러한 경우 GROUP BY 사용하면 값이 이상하게 나오기 때문에 서브쿼리를 사용해 줘야 한다
서브쿼리 사용한 경우
🆘 GROUP BY를 작성하고 쿼리 실행시 ··· sql_mode=only_full_group_by 에러 발생시 🔽
SET SESSION sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'; SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
실행해 주기 !
ㅤ집계함수에 대한 조건을 제한하는 역할을 하며, 조건식 작성시 집계함수를 사용한다.
💡
WHERE절
과 함께 사용하는 경우
(SQL의 조건이 모호해질 수 있기 때문에)
➡WHERE절
뒤에 작성