반응형
Notice
Recent Posts
Recent Comments
Link
지구정복
[SQLD] 18. GROUP BY, HAVING 절 본문
728x90
반응형
1. GROUP BY, HAVING 절
가. 집계 함수
-> 여러 행들이 모여 하나의 결과를 돌려주는 함수
- 여러 행들의 그룹이 모여서 그룹당 단 하나의 결과를 돌려주는 함수이다.
- GROUP BY 절은 행들을 소그룹화 한다.
- SELECT 절, HAVING 절, ORDER BY 절에 사용할 수 있다.
집 계 함수명 ( DISTINCT/ALL 칼럼이나 표현식 ) |
- ALL Default 옵션이므로 생략 가능함
- DISTINCT : 같은 값을 하나의 데이터로 간주할 때 사용하는 옵션임
- 일반적으로 group by절과 같이 사용 되나 테이블 전체가 하나의 그룹이 되는 경우 Group by 절 없이 사용 가능
SELECT COUNT(* )
from TMP
나. GROUP BY 절
-> 데이터들을 작은 그룹으로 분류하여 소그룹에 대한 항목별로 통계 정보를 얻을 때 추가로 사용된다.
- GROUP BY 절을 통해 소그룹별 기준을 정한 후, SELECT 절에 집계 함수를 사용한다.
- 집계 함수의 통계 정보는 NULL 값을 가진 행을 제외하고 수행한다.
- GROUP BY 절에서는 SELECT 절과는 달리 ALIAS 명을 사용할 수 없다.
- 집계 함수는 WHERE 절에는 올 수 없다. (집계 함수를 사용할 수 있는 GROUP BY 절보다 WHERE 절이 먼저 수행된다)
- WHERE 절은 전체 데이터를 GROUP으로 나누기 전에 행들을 미리 제거시킨다.
- HAVING 절은 GROUP BY 절의 기준 항목이나 소그룹의 집계 함수를 이용한 조건을 표시할 수 있다.
- GROUP BY 절에 의한 소그룹별로 만들어진 집계 데이터 중, HAVING 절에서 제한 조건을 두어 조건을 만족하는 내용만 출력한다.
- HAVING 절은 일반적으로 GROUP BY 절 뒤에 위치한다.
오류 | SELECT POSITION 포지션, AVG(HEIGHT)평균키 FROM PLAYER; |
정상 | SELECT POSITION 포지션, AVG(HEIGHT)평균키 FROM PLAYER GROUP BY POSITION ; |
|
다. HAVING 절
-> HAVING 절에 맞는 조건을 출력하여 주는 것으로 보통 GROUP BY 절 뒤에 서술(순서를 바꾸어도 상관은 없음)
- 예
주의 할 점은 WHERE 절의 조건 변경은 대상 데이터의 개수가 변경되므로 결과 데이터 값이 변경될 수 있지만, HAVING 절의 조건 변경은 결과 데이터 변경은 없고 출력되는 레코드의 개수만 변경될 수 있다. |
라. CASE 표현을 활용한 월별 데이터 집계
-> "집계 함수(CASE( ))~GROUP BY" 기능은 모델링의 저11정규화로 인해 반복되는 칼럼의 경우 구분 칼럼을 두고
여러 개의 례코드로 만들어진 집합을, 정해진 칼럼 수만큼 확장해서 집계 보고서를 만드는 유용한 기법이다.
- 예
마. 집계 함수와 NULL 처리
-> 다중 행 함수를 사용 하는 것은 불필요한 부하가 발생하고 연산시 Null에 대한 부분을 함수에서 제외 하므로 다중행 함수안에서는 NVL/ISNULL 사용이 불필요
NULL값을 0으로 변경 등으로 사용하고자 한다면 다중행 함수 바깥에서 사용하면 원하는 값을 볼 수 있다.
imple_case_expression | decode문과 유사 | SELECT deptno, case deptno when 10 then 'ACCOUNTING' when 30 then 'SALES' else 'ETC' end as dept from emp |
searched_case_expression | if..then..else문과 유사, when 절 다음에 여러가지 조건 가능 | SELECT deptno, case when deptno = 10 then 'ACCOUNTING' when deptno = 30 then 'SALES' else 'ETC' end as dept from emp |
정리
----1. 집계함수 : GROUP BY절에서 그룹을 정하고 SELECT절에서 집계함수 사용
--집계함수는 WHERE 절에 올 수 없다. / WHERE절은 GROUP 하기 전에 데이터를 제거시킨다.
--COUNT(*) : NULL값을 포함한 행의 수 반환
--COUNT(표현식) : 표현식의 값이 NULL인 것을 제외한 행의 수 출력
--SUM(표현식) : 표현식의 NULL값을 제외한 합계를 출력
--AVG(표현식) : 표현식의 NULL값을 제외한 평균을 출력
--MAX(표현식) : 표현식의 최대값을 출력
--MIN(표현식) : 표현식의 최소값을 출력
--STDDEV(표현식) : 표현식의 표준 편차를 출력
--VARIAN(표현식) : 표현식의 분산을 출력
SELECT COUNT(*)
FROM EMP;
----2. GROUP BY절
SELECT POSITION, ROUND(AVG(HEIGHT),3) 평균키
FROM PLAYER
GROUP BY POSITION;
----3. HAVING 절
--조건에 맞는 그룹들만 출력 / HAVING절과 GROUP BY절의 순서는 상관없다.
SELECT POSITION, ROUND(AVG(HEIGHT),2) 평균키
FROM PLAYER
GROUP BY POSITION
HAVING AVG(HEIGHT) >= 180;
----4. 집계함수와 NULL처리
SELECT DEPTNO,
CASE WHEN DEPTNO = '10' THEN 'ACCOUNTING'
WHEN DEPTNO = '30' THEN 'SALES'
ELSE 'ETC'
END AS DEPT
FROM EMP;
[출처]
wiki.gurubee.net/pages/viewpage.action?pageId=27427493
728x90
반응형
'자격증 정복 > SQLD' 카테고리의 다른 글
[SQLD] 20. 표준조인 (STANDARD JOIN) (0) | 2020.11.10 |
---|---|
[SQLD] 19. 조인 (JOIN) (0) | 2020.11.10 |
[SQLD] 17. 함수 (Function) (0) | 2020.11.10 |
[SQLD] 16. WHERE절 (0) | 2020.11.09 |
[SQLD] 15. TCL (Transaction Control Language) (0) | 2020.11.09 |
Comments