MySQL에서 부서별 직원 수 및 조건 기반 집계 분석

부서별 인원 집계와 특정 조건 충족 건수 동시 계산

관계형 데이터베이스에서 데이터 집계는 분석 업무의 핵심 요소입니다. MySQL은 COUNT(), SUM()과 같은 집계 함수를 통해 다양한 통계를 효과적으로 수행할 수 있습니다. 특히 하나의 쿼리에서 전체 카운트와 함께 조건을 만족하는 하위 그룹의 수를 동시에 산출하는 방법은 실무에서 자주 사용됩니다.

기본 그룹화를 통한 집계

GROUP BY 절은 동일한 속성을 가진 레코드들을 그룹으로 묶어 각 그룹에 대한 통계를 제공합니다. 예를 들어, employees 테이블에서 소속 부서별 전체 직원 수를 구하려면 다음과 같은 쿼리를 사용할 수 있습니다.

SELECT 
    department AS 부서명,
    COUNT(*) AS 전체인원
FROM employees 
GROUP BY department;

이 쿼리는 각 부서에 속한 모든 직원을 대상으로 그룹화하여 각각의 인원 수를 반환합니다.

조건 기반 부분 집계

전체가 아닌 특정 조건을 만족하는 데이터만 집계하고 싶은 경우 WHERE 절을 활용할 수 있습니다. 예를 들어 급여가 5,000 초과인 직원만을 대상으로 부서별 인원을 세고자 할 때 다음 쿼리를 사용합니다.

SELECT 
    department AS 부서명,
    COUNT(*) AS 고임금인원
FROM employees 
WHERE salary > 5000 
GROUP BY department;

이 방식은 사전 필터링을 통해 조건에 맞는 레코드만 포함하므로 해당 부서 내 고임금 그룹의 규모를 파악하는 데 유용합니다.

단일 쿼리 내 복합 집계

더 정교한 분석을 위해서는 하나의 결과셋 안에서 여러 통계 지표를 동시에 도출해야 할 수 있습니다. 아래 쿼리는 각 부서의 전체 인원과 더불어 급여가 5,000 초과인 직원 수를 함께 출력합니다.

SELECT 
    department AS 부서명,
    COUNT(*) AS 전체인원,
    SUM(CASE WHEN salary > 5000 THEN 1 ELSE 0 END) AS 고임금인원
FROM employees 
GROUP BY department;

여기서 CASE 표현식은 조건에 따라 1 또는 0을 반환하며, 이를 SUM()으로 합산함으로써 조건을 만족하는 행의 개수를 산출합니다. 이 방법은 성능 면에서도 효율적이며, 여러 가지 기준의 비율 분석(예: 고임금 비중)으로 확장하기 쉽습니다.

응용 예시: 비율 및 비중 계산

위 쿼리를 응용해 고임금 직원의 비율까지 추가하면 보다 풍부한 인사이트를 얻을 수 있습니다.

SELECT 
    department AS 부서명,
    COUNT(*) AS 전체인원,
    SUM(CASE WHEN salary > 5000 THEN 1 ELSE 0 END) AS 고임금인원,
    ROUND(
        (SUM(CASE WHEN salary > 5000 THEN 1 ELSE 0 END) * 100.0) / COUNT(*), 2
    ) AS 고임금비율
FROM employees 
GROUP BY department;

이 쿼리는 각 부서의 고임금 인력 구성비를 백분율로 표시하여 조직 내 급여 구조를 비교 분석하는 데 활용할 수 있습니다.

태그: MySQL SQL 집계 GROUP BY CASE WHEN 데이터 분석

6월 13일 16:54에 게시됨