• [SQLD] GROUP BY절, HAVING절

    2025. 2. 22.

    by. hyunji1109

    GROUP BY 절

    • 각 행을 특정 조건에 따라 그룹으로 분리하여 계산하도록 하는 구문식
    • GROUP BY 절에 그룹을 지정할 컬럼을 전달 (여러 개 전달 가능)
    • 만약 그룹 연산에서 제외할 대상이 있다면 미리 WHERE절에서 해당 행을 제외함
    • WHERE절이 GROUP BY절보다 먼저 수행
    • 그룹에 대한 조건은 WHERE절에서 사용할 수 없음
    • SELECT 절에 집계 함수를 사용하여 그룹연산 결과 표현
    • GROUP BY절을 사용하면 데이터가 요약되므로 요약되기 전 데이터와 함께 출력할 수 있음

     

    문법

     

     

    ① 부서별(DEPARTMENT_ID) 급여 총 합과 급여 평균 출력

     

     

    ② 직군(JOB_ID)별로 급여 총 합과 급여 평균 출력

     

     

    ③ GROUP BY의 잘못된 사용

    👉 GROUP BY 절에 DEPTNO를 사용하면 DEPTNO가 같은 값은 값끼리 묶여서 요약 정보만 SELECT절에 표현 가능 따라서 GROUP BY 컬럼과 집계 함수를 사용한 결과만이 전달 가능
    👉 GROUP BY 절에 명시되지 않은 컬럼 전달 불가

     

     

     

    HAVING 절

    • 그룹 함수 결과를 조건으로 사용할 때 사용하는 절
    • WHERE 절을 사용하여 그룹을 제한할 수 없으므로 HAVING 절에 전달
    • HAVING 절이 GROUP BY 절 앞에 올 수는 있지만 뒤에 쓰는 것을 권장
    • 내부적 연산 순서가 SELECT 절보다 먼저이므로 SELECT절에서 선언된 Alias 사용 불가

     

    ① 그룹 함수 조건을 WHERE절에 전달하는 경우 발생한 에러

     

     

    ② 그룹 함수 조건 HAVING 절에 전달

     

     

    ③ WHERE절과 HAVING절 동시 사용

    👉 순서상 WHERE 절을 먼저 수행, 원하는 데이터만 필터링 한 후 GROUP BY에 의해 그룹연산을 수행한 뒤 HAVING절에서 만족하는 데이터만 선택하여 출력함

    'CS > SQL' 카테고리의 다른 글

    [SQLD] 조인  (0) 2025.02.23
    [SQLD] ORDER BY절  (0) 2025.02.22
    [SQLD] WHERE절  (0) 2025.02.22
    [SQLD] 함수  (0) 2025.02.21
    [SQLD] SELECT문  (0) 2025.02.20

    댓글