본문 바로가기

자격증/SQLD

SQLD 2과목 1-7장. GROUP BY, HAVING절

[ 목차 ]

1. 집계 함수와 특징

2. 집계 함수의 종류

3. GROUP BY절과 특성

4. Having 절

5. GROUP BY 소그룹의 데이터 중 일부만 얻는 방법

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

7. 집계 함수와 NULL

 

1. 집계 함수와 특징

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

2) GROUP BY 절은 행들을 소그룹화

3) SELECT 절, HAVING, ORDER BY절에 사용할 수 있음

4) 그룹에 대한 정보를 제공하므로 주로 숫자유형에 사용하지만 MAX, MIN, COUNT 함수는 문자, 날짜에도 적용 가능

5) 일반적으로 GROUP BY 절과 같이 상용되지만 테이블 전체가 하나의 그룹이 되는 경우 단독으로 사용 가능

집계함수명 ( [DISTINCT | ALL] 칼럼 or 표현식 )

ALL : Default 옵션으로 생략 가능
DISTINCT : 같은 값을 하나의 데이터로 간주할 때 사용하는 옵션

2. 집계 함수의 종류

3. GROUP BY절과 특성

1) FROM절과 WHERE절 뒤에 오며 테이들을 작은 그룹으로 분류하여 소그룹에 대한 항목별로 통계 정보를 얻을 때 사용

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

2) GROUP BY절을 통해 소그룹별 기준을 정한 후 SELECT 절에 집계 함수를 사용

3) 집계 함수릐 통계 정보는 NULL값을 가진 행을 제외하고 수행

4) GROUP BY 절에서는 SELECT절과는 달리 ALIAS명을 사용할 수 없음

5) 집계 함수는 WHERE절에 올 수 없음

6) WHERE절은 전체 데이터를 그룹으로 나누기 전에 행들을 미리 제거

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

8) GROUP BY절에 의해 소그룹별로 만들어진 집계 데이터 중 HAVING 절에서 제한 조건을 둬 조건을 만족하는 내용만

   출력

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

10) 관계형 데이터베이스 환경에서 뒤에서 언급하는 ORDER BY절을 명시해야 데이터 정렬이 수행

 

4. Having 절

1) HAVING절은 WHERE절과 비슷하지만 그룹을 나타내는 결과 집합의 행에 조건이 적용된다는 차이

2) SQL 문장은 GROUP BY절과 HAVING절의 순서를 바꾸어 수행가능하나 지키는 것을 권고

3) SELECT절에서 사용하지 안흔 칼럼이나 집계함수가 아니더라도 GROUP BY 절의 기준 항목이나 소그룹의 집계 함수를

    이용한 조건을 표시 가능

4) WHERE절의 조건 변경을 대상 데이터의 개수가 변경되므로 결과 데이터 값이 변경될 수 있지만, HAVING 절의 조건

    변경을 결과 데이터 변경은 없고 출력되는 레코드의 개수만 변경

 

5. GROUP BY 소그룹의 데이터 중 일부만 얻는 방법

1) GROUP BY 연산 전 WHERE 절에서 조건을 적용하여 필요한 데이터만 추출하여 GROUP BY 연산을 하는 방법

2) GROUP BY 연산 후 HAVING 절에서 필요한 데이터만 필터링 하는 방법

3) WHERE절에서 조건절을 적용하여 GROUP BY의 계산 대산을 줄이는 것이 자원 활용에서 더 효율적

 

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

1) 집계함수(CASE ( )) ~GROUP BY 기능은 모델링의 제1정규화로 인해 반복되는 칼럼의 경우 구분 칼럼을 두고 여러 개

    의 레코드로 만들어진 집합을 정해진 칼럼 수만큼 확장해서 집계 보고서를 만드는 유용한 기법

 

7. 집계 함수와 NULL

1) 다중행 함수에서 빈칸을 NULL이 아닌 ZERO로 표현하기 위해 NVL/ISNULL을 사용할 경우 오히려 불필요한 부하 발생

2) 입력 값이 전체 건수가 NULL인 경우 함수의 결과가 NULL로 나오며, 일부만 NULL일 경우 행을 다중행 함수에서 제외

3) CASE 표현 시 ELSE 절을 생략하면 Default 값이 NULL로 반환

4) NULL은 연산의 대상이 아니지만 SUM처럼 ELSE 절에서 0을 지정하면 불필요하게 0이 연산에 사용하여 자원 증가하

    기 때문에 가능한 ELSE 절의 상수값을 지정하지 않거나 ELSE절 작성 X

5) 오라클 DECODE 함수는 4번 째 인자를 지정하지 않으면 NULL이 Default로 할당

6) NULL이 아닌 0을 표시하려면 NVI, ISNULL처럼 전체 SUM의 결과가 NULL인 경우에 한 번 NVL/ISULL 함수 사용

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

SQLD 2과목 1-9장. 조인  (0) 2020.03.12
SQLD 2과목 1-8장. ORDER BY절  (0) 2020.03.12
SQLD 2과목 1-5장. WHERE절  (0) 2020.03.12
SQLD 2과목 1-4장. TCL  (0) 2020.03.12
SQLD 2과목 1-3장. DML  (0) 2020.03.09