SQL 데이터 분석 및 처리 기법: DISTINCT, GROUP BY, HAVING 절과 집계 함수의 이해

보히·2024년 7월 31일
  1. DISTINCT와 GROUP BY

1-1.
SELECT DISTINCT DEPARTMENT_ID
FROM EMPLOYEES e;
설명:
DISTINCT: 중복된 데이터를 제거하고 고유한 값을 반환합니다.
쿼리 결과: 고유한 DEPARTMENT_ID 리스트가 반환됩니다.
요약:
DISTINCT는 중복된 데이터를 제거할 때 사용됩니다. 이는 대량의 데이터에서 고유한 값을 확인하거나 중복된 데이터를 걸러낼 때 유용합니다.

1-2.
SELECT DEPARTMENT_ID
FROM EMPLOYEES e
GROUP BY DEPARTMENT_ID;
설명:
GROUP BY: 데이터를 특정 열을 기준으로 그룹화합니다.
쿼리 결과: 각 부서별로 그룹화된 DEPARTMENT_ID가 반환됩니다.
요약:
GROUP BY는 데이터를 특정 기준으로 그룹화하여 집계 함수를 사용하거나 데이터를 요약할 때 유용하게 사용됩니다.

  1. 집계 함수
    SELECT DEPARTMENT_ID, SUM(SALARY)
    FROM EMPLOYEES e
    GROUP BY DEPARTMENT_ID
    ORDER BY DEPARTMENT_ID;
    설명:
    SUM(SALARY): 부서별 급여를 합산합니다.
    GROUP BY DEPARTMENT_ID: 부서별로 데이터를 그룹화합니다.
    ORDER BY DEPARTMENT_ID: 부서번호 기준으로 정렬합니다.
    쿼리 결과: 부서별 급여 합계가 부서번호와 함께 반환됩니다.
    요약:
    SUM 함수는 데이터를 그룹화하여 각 그룹 내의 값을 합산할 때 사용됩니다. 이는 총합을 구하거나 특정 기준에 따라 데이터를 요약할 때 유용합니다.

  2. 부서별 사원 수 및 급여 통계
    SELECT DEPARTMENT_ID, SUM(SALARY), AVG(SALARY),
    COUNT(EMPLOYEE_ID), COUNT(SALARY)
    FROM EMPLOYEES e
    GROUP BY DEPARTMENT_ID
    ORDER BY DEPARTMENT_ID;
    설명:
    SUM(SALARY): 부서별 급여를 합산합니다.
    AVG(SALARY): 부서별 평균 급여를 계산합니다.
    COUNT(EMPLOYEE_ID): 부서별 사원의 수를 셉니다.
    COUNT(SALARY): 급여가 있는 사원의 수를 셉니다.
    GROUP BY DEPARTMENT_ID: 부서별로 데이터를 그룹화합니다.
    ORDER BY DEPARTMENT_ID: 부서번호를 기준으로 정렬합니다.
    쿼리 결과: 각 부서의 급여 총합, 평균 급여, 사원 수 등이 반환됩니다.
    요약:
    이 쿼리는 집계 함수를 사용하여 부서별 급여 통계를 계산하는 방법을 보여줍니다. GROUP BY를 통해 부서별로 데이터를 그룹화하고, 여러 집계 함수를 통해 다양한 통계 값을 계산할 수 있습니다.

  3. 부서별 직급별 사원 수 및 평균 급여
    SELECT DEPARTMENT_ID, JOB_ID,
    SUM(SALARY), AVG(SALARY), COUNT(EMPLOYEE_ID)
    FROM EMPLOYEES e
    WHERE DEPARTMENT_ID = 80
    GROUP BY DEPARTMENT_ID, JOB_ID
    ORDER BY DEPARTMENT_ID, JOB_ID;
    설명:
    SUM(SALARY): 직급별 급여를 합산합니다.
    AVG(SALARY): 직급별 평균 급여를 계산합니다.
    COUNT(EMPLOYEE_ID): 직급별 사원 수를 셉니다.
    WHERE DEPARTMENT_ID = 80: 부서번호 80에 해당하는 데이터만 필터링합니다.
    GROUP BY DEPARTMENT_ID, JOB_ID: 부서와 직급별로 데이터를 그룹화합니다.
    ORDER BY DEPARTMENT_ID, JOB_ID: 부서번호와 직급을 기준으로 정렬합니다.
    쿼리 결과: 부서번호 80의 각 직급별 사원 수, 급여 총합, 평균 급여가 반환됩니다.
    요약:
    이 쿼리는 부서 내에서 직급별로 데이터를 세분화하여 통계를 계산하는 방법을 보여줍니다. GROUP BY를 여러 열에 적용하여 세분화된 통계를 얻을 수 있습니다.

  4. HAVING 절을 사용한 집계 함수 조건 필터링
    SELECT DEPARTMENT_ID, COUNT(EMPLOYEE_ID)
    FROM EMPLOYEES e
    WHERE DEPARTMENT_ID IS NOT NULL
    GROUP BY DEPARTMENT_ID
    HAVING COUNT(EMPLOYEE_ID) >= 10
    ORDER BY DEPARTMENT_ID;
    설명:
    COUNT(EMPLOYEE_ID): 부서별 사원 수를 셉니다.
    WHERE DEPARTMENT_ID IS NOT NULL: 부서번호가 없는 레코드를 제외합니다.
    GROUP BY DEPARTMENT_ID: 부서별로 데이터를 그룹화합니다.
    HAVING COUNT(EMPLOYEE_ID) >= 10: 사원 수가 10명 이상인 부서만 필터링합니다.
    ORDER BY DEPARTMENT_ID: 부서번호를 기준으로 정렬합니다.
    쿼리 결과: 사원 수가 10명 이상인 부서의 부서번호와 사원 수가 반환됩니다.
    요약:
    HAVING 절은 GROUP BY와 함께 집계 함수의 결과를 기반으로 조건을 적용할 때 사용됩니다. WHERE 절과 달리 집계 결과에 조건을 적용할 수 있습니다.

0개의 댓글