그룹 함수
 - 집계 함수(Aggregate Function)이라고도 한다.
 - 집계란 하나 이상의 데이터들을 대상으로 일종의 통계 정보를 말하며 집계 함수 역시 이러한 기능을 수행하는 함수들을 말한다.
 - 단일 행 함수와 달리 그룹 함수는 접체 집합 또는 그룹으로 분류된 집합에 작용하여 그룹당 하나의 결과를 생성한다. 

 

 그룹 함수 종류 
 - COUNT(*) : NULL 값을 포함한 행의 수 출력 
 - COUNT(표현식) : 표현식의 값이 NULL 값인 것을 제외한 행의 수 출력 
 - SUM([DISTINCT|ALL] 표현식) : 표현식의 NULL 값을 제외한 합계 출력 
 - AVG([DISTINCT|ALL] 표현식) : 표현식의 NULL 값을 제외한 평균 출력 
 - MAX([DISTINCT|ALL] 표현식) : NULL 값을 제외한 표현식의 최대값 출력(문자, 날짜 데이터 타입 사용 가능) 
 - MIN([DISTINCT|ALL] 표현식) : NULL 값을 제외한 표현식의 최소값 출력(문자, 날짜 데이터 타입 사용 가능) 
 - STDDEV([DISTINCT|ALL] 표현식) : 표현식의 NULL 값을 제외한 표준편차 출력 
 - VARIANCE([DISTINCT|ALL] 표현식) : 표현식의 NULL 값을 제외한 분산 출력

 

 그룹 함수 사용
 - DISTINCT를 지정하면 함수는 중복되지 않는 값만 검토하고 ALL을 지정하면 중복 값을 포함한 값을 검토한다.
 - ALL 키워드는 기본값이므로 별도로 사용할 필요가 없다.
 - COUNT(*)를 제외한 모든 그룹 함수는 NULL 값을 제외하고 처리한다.
 - NULL 값을 특정 값으로 치환하려면 NVL 함수를 사용한다.
 - 모든 데이터 타입에 MIN, MAX, COUNT 함수를 사용할 수 있다.
 - AVG, SUM, VARIANCE, STDDEV는 숫자 데이터 타입만 사용이 가능하다.

 

 

 

 GROUP BY
 - 테이블의 행을 더 작은 그룹으로 나눈다.
 - 집계 합수 이외에 SELECT 절에 나오는 컬럼이나 값은 두 GROUP BY절에 명시한다.
 - 한 개 이상의 컬럼이나 값이 올 수 있다.
 - GROUP BY 절을 이용하여 그룹으로 묶은 후 SELECT 절에는 GROUP BY에서 사용한 <속성>과 집계 함수만 나올 수 있다.
 - WHERE 조건절에 사용된 컬럼이나 값은 GROUP BY 절에 사용한 컬럼이나 값과 달라도 상관없다.
 - WHERE 조건이 먼저 처리된 후 GROUP BY 및 집계 함수가 처리된다.
 - ORDER BY 절을 사용하면 그룹핑 한 결과를 일정한 순서로 볼 수 있다.

 - ex) 부서별로 소속 인원수, 평균 급여, 최저 급여, 최고 급여, 급여 합계 조회

1
2
3
4
5
6
7
8
9
SELECT
    deptno,
    COUNT(*),
    TRUNC(AVG(sal),1),
    MIN(sal),
    MAX(sal),
    SUM(sal)
FROM emp
GROUP BY deptno;
 

 

 

 

 HAVING
 - GROUP BY 절의 기준 항목이나 소그룹의 집계 함수를 이용한 조건을 표시할 수 있다.
 - WHERE 절은 집계 이전, HAVING 절은 집계 이후의 필터링 작업을 수행한다.
 - 그룹이 형성되고 그룹함수가 계산된 후 HAVING절이 적용된다.

 - ex) 소속 선수가 47명보다 많은 팀의 팀ID, 인원, 평균 몸무게 조회

1
2
3
4
5
6
7
SELECT
    team_id,
    COUNT(*),
    AVG(weight)
FROM player
GROUP BY team_id
HAVING COUNT(*> 47;
 

 

 

 

 오늘의 한 줄 : GROUP BY는 쓸 때마다 헷갈린다.


 

 

 

 출처 : SK 동반성장 아카데미, 비전공자를 위한 SQL 입문, 「그룹 함수」

'공부 > SQL' 카테고리의 다른 글

[SQL] 조인 처리과정 이해 및 기본 조인 문장  (0) 2019.12.03
[SQL] 윈도우 함수  (0) 2019.12.03
[SQL] 일반 함수  (0) 2019.12.03
[SQL] 변환 함수  (0) 2019.12.03
[SQL] 날짜 연산 및 날짜 함수  (0) 2019.12.03

+ Recent posts