SQLD - GROUP 연산

헨도·2024년 2월 7일
0

SQLD

목록 보기
17/28
post-thumbnail

GROUP BY 문

  • GROUP BY 는 테이블에서 소규모 행을 그룹화하여 합계, 평균, 최댓값, 최솟값 등을 계산할 수 있다.
  • HAVING 구에 조건문을 사용한다.
  • Grouping 된 결과에 대해 조건문을 사용한다.
  • ORDER BY 를 사용해서 정렬을 할 수 있다.

(1)

DEPTNOSAL
102450
101300
203000
201100
20800
203000
202975
30950
305000
301600
SELECT
	(3) DEPTNO, SUM(SAL)
FROM EMP
(2) GROUP BY
	  DEPTNO;

(4)

DEPTNOSUM(SAL)
3014400
2010875
103750
  • 위의 GROUP BY 예에서 (1)번은 EMP 테이블을 그대로 조회한 것이다.
    즉, 'SELECT DEPTNO, SAL FROM EMP' 를 실행한 것이다.
  • (2) 번은 DEPTNO(부서번호)로 그룹을 만들고, (3)번은 그룹별 합계를 계산하라는 뜻이다.
  • (4) 번은 부서별 합계를 계산하게 된다.

HAVING 사용

  • GROUP BY 에 조건절을 사용하려면 HAVING 을 사용해야 한다.
    만약 WHERE 절에 조건을 사용하게 되면 조건을 충족하지 못하는 데이터들은 GROUP BY 대상에서 제외된다.
SELECT
	DEPTNO, SUM(SAL)
FROM EMP
GROUP BY
	DEPTNO
HAVING
	SUM(SAL) > 10000;  -- GROUP BY 결과에서 급여합계가 10000 이상만 조회한다.
  • 결과 값
DEPTNOSUM(SAL)
3014400
2010875

집계 함수 종류

  • 집계 함수
집계 함수설명
COUNT()행 수를 조회한다.
SUM()합계를 계산한다.
AVG()평균을 계산한다.
MAX() 와 MIN()최댓값과 최솟값을 계산한다.
STDDEV()표준편차를 계산한다.
VARIANCE()분산을 계산한다.

COUNT 함수

  • COUNT() 함수는 행 수를 계산하는 함수이다.
    COUNT(*) 는 NULL 값을 포함한 모든 행 수를 계산한다.
    하지만 COUNT(컬럼명)는 NULL 값을 제외한 행 수를 계산한다.
SELECT
	COUNT(*)  -- NULL 을 포함한 전체 행 수를 계산한다.
FROM EMP;
  • 결과 값
COUNT(*)
14
  • MGR 컬럼은 한 개의 NULL 을 가지고 있다.
    그래서 COUNT(MGR)로 하면 NULL 이 제외되고 행 수를 계산한다.
SELECT
	COUNT(MGR) -- NULL 을 제외한 전체 행 수를 계산한다.
FROM EMP;
  • 결과 값
COUNT(MGR)
13

GROUP BY 사용 예제

1. 부서별(DEPTNO), 관리자별(MGR) 급여평균 계산

  • 부서별, 관리자별 급여평균이므로 GROUP BY에 부서와 관리자를 추가한다.
  • 평균을 계산하기 위해서 SELECT 문에 AVG 함수를 사용해야 한다.
SELECT
	DEPTNO, MGR, AVG(SAL) -- AVG(SAL) : 급여평균을 계산한다.
FROM EMP
GROUP BY
	DEPTNO, MGR; -- 부서별, 관리자별 소그룹을 만든다.
  • 결과 값
DEPTNOMGRAVG(SAL)
1010001300
20800
2010002987.5
3010065000

2. 직업별(JOB) 급여합계 중에 급여(SAL)합계가 1000 이상인 직업

  • 직업별 급여합계이므로 GROUP BY 에 JOB 을 포함시키고 급여합계가 1000 이상만 조회해야 하므로 HAVING 구에 조건을 넣어햐 한다.
SELECT
	JOB, SUM(SAL)
FROM EMP
GROUP BY 
	JOB
HAVING
	SUM(SAL) >= 1000; -- 직업별 그룹합계 중에서 급여가 1000 이상인 직업을 조회한다.

3. 사원번호 1000 ~ 1003 번의 부서별 급여합계

  • 사원번호 1000 번에서 1003 번까지 조회를 해야 하므로 WHERE 문에 조건을 넣어야 한다.
  • 그리고 부서별 합계이므로 GROUP BY 에 DEPTNO 를 사용하고 SELECT 문에 SUM 함수를 사용한다.
SELECT
	DEPTNO, SUM(SAL)
FROM EMP
WHERE
	EMPNO BETWEEN 1000 AND 1003
GROUP BY
	DEPTNO;
  • 결과 값
DEPTNOSUM(SAL)
302850
203775
profile
Junior Backend Developer

0개의 댓글