집에서 하는 공부/SQLD

[SQLD]2과목.SQL 기본 및 활용-5

집돌이 공대남 2022. 10. 18. 00:54
반응형

7절 GROUP BY절, HAVING 절

1.  집계 함수 (Aggregate Function)

여러 행들의 그룹이 모여서 그룹당 하나의 결과를 돌려주는 함수

GROUP BY 절은 행들을 소그룹화

ㅇSELECT 절, HAVING 절, ORDER BY 절에 사용

 

*집계함수명(ALL | DISTINCT 칼럼/표현식)

=>ALL = Default는 옵션이므로 생략 가능함

=>DISTINCT=같은 값을 하나의 데이터로 간주할 때 사용하는 옵션임

주로 숫자 유형에 사용하고 MAX, MIN, COUNT 함수는 문자, 날짜에도 적용 가능함.

 

-COUNT(*) : NULL 값을 포함한 모든 행의 수를 출력

-COUNT(표현식) : NULL 값인 것을 제외한 행의 수를 출력

-SUM([DISTINCT|ALL] 표현식) : NULL을 제외한 합계 출력

-AVG([DISTINCT|ALL] 표현식) : NULL을 제외한 평균 출력

-MAX([DISTINCT|ALL] 표현식) : 최대값 출력(문자, 날짜 데이터 사용 가능)

-MIN([DISTINCT|ALL] 표현식) : 최소값 출력(문자, 날짜 데이터 사용 가능)

-STDDEV([DISTINCT|ALL] 표현식) : 표준 편차를 출력

-VARIAN([DISTINCT|ALL] 표현식) : 분산을 출력

 

*GROUP BY 절

FROM 절과 WHERE 절 뒤에 오고 데이터들을 작은 그룹으로 분류하여 소그룹에 대한 항목별 통계 정보를 얻을 때 추가로 사용됨.

SELECT DISTINCT 칼럼 ALIAS명
FROM 테이블명
WHERE 조건식
GROUP BY 칼럼/표현식
HAVING 그룹의 표현식;

 

*GROUP BY와 HAVING의 특성

- GROUP BY 절을 통해 소그룹별 기준을 정한 뒤, SELECT 절에 집계 함수 사용

- 집계 함수의 통계 정보는 NULL 값을 가진 행을 제외하고 수행

- 집계 함수는 WHERE 절에는 올 수 없음 (GROUP BY 절보다 WHERE 절이 먼저 수행)

- WHERE 절은 전체 데이터를 GROUP으로 나누기 전에 행들을 미리 제거하는 역할

-HAVING은 GROUP BY 절의 기준 항목이나 소그룹의 집계 함수를 이용한 조건을 효시할 수 있음

-GROUP BY 절에는 ALIAS명을 사용할 수 없다.

-HAVING 절은 일반적으로 GROUP BY 절 뒤에 위치

-원칙적으로 ORDER BY 절 명시해야 정렬

 

*HAVING 절

- WHERE 절에는 집계 함수를 사용할 수 없다.

- GROUP BY 절보다 HAVING 절을 앞에 사용해도 같은 결과가 나오지만, 논리적으로 순서를 지키는 것을 권고함.

-가능하면 WHERE 절에서 조건절을 적용하여 GROUP BY 계산 대상을 줄이는 것이 효과적

 

*다중행 함수에 NVL 함수를 사용하면 부하 발생함-> 굳이 사용할 필요 없음.

*Oracle의 DECODE 함수는 4번째 인자 지정하지 않으면 Default 값이 NULL

 

반응형