SQL 기본 -6. GROUP 연산

SSAD·2023년 2월 25일
0

SQLD

목록 보기
8/10

1. GROUP BY문

  • GROUP BY는 테이블에서 소규모 행을 그룹화하여 합계, 평균, 최댓값, 최솟값 등을 계산할 수 있음
  • HAVING구에 조건문을 사용
  • ORDER BY를 사용해서 정렬
SELECT DEPTNO, SUM(SAL)
  FROM EMP
GROUP BY DEPTNO;
  • 위의 GROUP BY 예에서 SELECT DEPTNO, SAL FROM EMP를 실행
  • DEPTNO로 그룹을 만들고, 그룹별 합계를 계산하라는 뜻

2. HAVING문 사용

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

3. 집계 함수 종류

집계 함수

COUNT()

  • 행 수를 조회

SUM()

  • 합계를 계산

AVG()

  • 평균을 계산

MAX()와 MIN()

  • 최대값과 최솟값을 계산

STDDEV()

  • 표준편차를 계산

VARIAN()

  • 분산을 계산

4. COUNT 함수

  • COUNT() 함수는 행 수를 계산하는 함수
  • COUNT(*)는 NULL값을 포함한 모든 행수를 계산
  • COUNT(칼럼명)는 NULL값을 제외한 행 수를 계산
SELECT COUNT(*)
	FROM EMP;

5. GROUP BY 사용 예제

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

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

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

  • 직업별 급여합계이므로 GROUP BY에 JOB을 포함시키고 급여합계가 1000 이상만 조회해야 하므로 HAVING 구에 조건을 넣어야 함
SELECT JOB, SUM(SAL)
FROM EMP
GROUP BY JOB
HAVING SUM(SAL) >= 1000;
  • 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;
  • WHERE EMPNO BETWEEN 1000 AND 1003 : 사원번호 별 조회 조건은 WHERE절에 넣어야 함
profile
learn !

0개의 댓글