본문 바로가기

자격증/SQLD

GROUP BY, HAVING 절

1. 집계 함수


집계 함수(Aggregate Function)의 특성

  • 여러 행들의 그룹이 모여서 그룹 당 단 하나의 결과를 돌려 줌

  • Group By 절은 행들을 소 그룹화.

  • Select 절, Having 절, Order By 절에 사용할 수 있음


집계 함수명

  • ALL : default 옵션, 생략 가능, 전체를 의미

  • DISTINCT : 같은 값을 하나의 데이터로 간주 함

  • COUNT(*) : Null 값을 포함한 행의 수 반환

  • COUNT(표현식) : NULL 값을 제외한 행의 수 출력

  • SUM(표현식) : NULL 값을 제외한 합계

  • AVG(표현식) : NULL 값을 제외한 평균

  • MAX(), MIN()...

  • STDDEV( 표현식) : 표준 편찬

  • VARIAN() : 표현식의 분산을 출력



예)

SELECT COUNT(*), COUNT(HEIGHT), MAX(HEIGHT), MIN(HEIGHT),

ROUND(AVG(HEIGHT), 2)

FROM PLAYER


2. GROUP BY


정의

데이터들을 작은 그룹으로 분류하여 소그룹에 대한 항목별로 통계  정보를 얻을 때 사용


위치

FROM, WHERE 절 뒤에 옴


특성

  • GROUP BY를 통해 소그룹별 기준을 정하고, SELECT 절에 집계 함수를 사용

  • 집계 함수는 NULL값을 제외하고 수행 (COUNT(*) 제외)

  • ALIAS 사용 불가능

  • 집계함수는 WHERE절에 올 수 없음

  • HAVING 절은 GROUP BY에 대한 조건 절

  • GROUP BY에서 만들어진 집계 데이터 중 HAVING 절을 만족하는 데이터만 사용

  • HAVING절은 GROUP BY뒤에 위치

  • GROUP BY절에서 그룹단위 표시가 있어야만 그룹단위 컬럼과 집계 함수 사용 가능


예제)

SELECT POSITION, AVG(HEIGHT)

FROM PALYER

GROUP BY POSITION


3. HAVING 절


정의

GROUP BY 절을 위한 조건 정의 절 ( 집계 함수 등을 사용하여 가능)


특징

  • GROUP BY 데이터 중 일부만 필요한 경우
    1) WHERE 절을 이용해 필요 데이터 추출 후 GROUP BY 연산하는 방법
    2) GROUP BY 연산 후 HAVING 절을 통해서 추출하는 방법이 존제

    하지만 WHERE 절을 통해 데이터를 추출하는 방법이 일반적으로 효율성이 더 높음

  • WHERE 변경 : 최종 데이터의 변화 있음

  • HAVING : 최종 데이터의 변화는 없으나 출력 row수엔 변화가 있음


사용

SELECT POSITION, AVG(HEIGHT)

FROM PLAYER

GROUP BY POSITION

HAVING AVG(HEIGHT) >= 180



4. CASE 표현을 활용한 월별 데이터 집계


정의

정규화로 중복을 제거한 데이터를 다시 중복 칼럼으로 볼 수 있도록 만들어주는 유요한 기능


STEP1. 개별 데이터 확인
SELECT ENAME, DEPTNO, DATEPART(MONTH, HIREDATE) 입사월, SAL
FROM EMP


STEP2. 월별 데이터 구분
SELECT ENAME, DEPTNO,

CASE MONTH WHEN 1 THEN SAL END M01,
CASE MONTH WHEN 2 THEN SAL END M02,

CASE MONTH WHEN 12 THEN SAL END M12

FROM (SELECT ENAME, DEPTNO, EXTRACT(MONTH FROM HIREDATE)

MONTH, SAL


STEP3. 부서별 데이터 집계


SELECT ENAME, DEPTNO,

AVG(CASE MONTH WHEN 1 THEN SAL END) M1,
AVG(CASE MONTH WHEN 2 THEN SAL END) M02,

AVG(CASE MONTH WHEN 12 THEN SAL END) M12

FROM (SELECT ENAME, DEPTNO, EXTRACT(MONTH FROM HIREDATE)

MONTH, SAL

GROUP BY DEPTNO


5. 집계함수와 데이터 NULL 처리


A테이블에 100만건이 있다고 가정하에 SUM(NVL(A.SCORE, 0)) 과 NVL(SUM(A.SCORE), 0) 의 차이는 전자의 경우 100만건에 대해서 NVL을 수행, 후자는 마지막 결과에 대해서 한 번만 NVL을 수행한다.



'자격증 > SQLD' 카테고리의 다른 글

JOIN  (0) 2016.09.09
ORDER BY 절  (0) 2016.09.09
where 절  (0) 2016.09.09
TCL (Transaction Control Language)  (0) 2016.09.09
DML (Data Manipulation Language, 데이터 조작 언어)  (0) 2016.09.09