# Work/Data

[SQLD] GROUP BY절 : SQL 기본 및 활용 / SQL 기본

im-jamie 2023. 2. 21. 22:47

SQLD 시험 내용
(a) 데이터 모델링의 이해 (출제 비중 20% : 10문제, 20점)
- 데이터 모델링의 이해 : 데이터모델의 이해 / 엔터티 / 속성 / 관계 / 식별자
- 데이터 모델과 성능 : 정규화와 성능 / 반정규화와 성능 / 대용량 데이터에 따른 성능 / DB 구조와 성능 / 분산 DB 데이터에 따른 성능
(b) SQL 기본 및 활용 (출제 비중 80% : 40문제, 80점)
- SQL 기본 : 정보 요구 사항 / DDL / DML / TCL / WHERE / FUNCTION / GROUP BY, HAVING / ORDER BY / JOIN
- SQL 활용 : 표준 조인 / 집합 연산자 / 계층형 질의 / 서브쿼리 / 그룹함수 / 윈도우 함수 / DCL / 절차형 SQL
- SQL 최적화 기본 원리 : 옵티마이저와 실행 계획 / 인덱스 기본 / 조인 수행 원리


1. GROUP BY절

GROUP BY절 :- SELECT문에 GROUP BY절을 사용해 데이터를 그룹화(Grouping) 할 수 있다.- GROUP BY절에는 Grouping 기준이 될 칼럼 또는 표현식을 콤마로 구분하여 기술한다.- Grouping 칼럼 / 표현식 들의 값이 같은 행들로 행 그룹 (group of rows)을 생성하고, 각 행 그룹당 1개인 행으로 그룹화(Grouping)

SELECT a.job, SUM(a.sal), Max(a.sal)
FROM emp a
GROUP BY a.job;

--group by절의 select에는 그룹핑 될 수 있는 것만!
--그룹화가 안 되는 empno가 들어가면 error남
EMPNO ENAME SAL JOB
1 a 100 teacher
2 b 100 teacher
3 c 200 teacher
4 d 300 salesman
JOB SUM(SAL) MAX(SAL)
teacher 400 200
salesman 300 300

 

집계 함수 :

- 다중 행의 값을 입력 받아 단일 행의 값을 리턴하는 함수 (count, sum, avg, max, min)

- 집계함수를 사용하면 행 그룹별로 null을 제외한 값들이 집계된다.  (단 count 함수는 0)

SELECT a.deptno, count(*) as cnt, sum(a.sal) as sum_sal, avg(a.comm as avg_comm
from emp a
group by a.deptno;
deptno comm
30  
30 0
30 100
30 300
20  
deptno cnt_comm sum_comm avg_comm
30 3 400 400/3
20 0    

* deptno가 20인 것은 행의 값이 null -> count 함수는 0 이며 그 외는 null이다.

* deptno가 30인 것 -> count 함수는 null을 제외하고 세기 때문에 3이며, avg 함수는 합계를 count 값으로 나눈다.

 

- 집계 함수의 인자에 연산이나 가공이 존재하면, 집계 함수 실행 전에 행 그룹 내에 있는 개별 행 단위로 수행된다.

SELECT a.deptno, COUNT(NVL(a.comm,0)) as cnt_nvl_comm
,SUM(NVL(a.comm,0)) as sum_nvl_comm
FROM emp a
GROUP BY a.deptno;

--NVL가 먼저 실행되기 때문에, comm가 없는 값을 다 0으로 치환한 수 count, sum을 실행한다.

- GROUP BY절 없이 SELECT 절에 집계 함수가 사용되면, 전체 행이 하나의 행 그룹이 된다.

- COUNT(*)은 NULL을 포함해 행 그룹에 속한 전체 행의 개수를 리턴